随机排列问题
隨機排列數組:
1)PERMUTE-BY-SORTING(A)
為數組的每個元素賦一個隨機的優先級,然后根據優先級對數組A進行排序。
PERMUTE-BY-SORTING(A) 1 n ← length[A] 2 for i ← 1 to n 3 do P[i] = RANDOM(1, n
3
) 4 sort A, using P as sort keys 5 return A<span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h>typedef struct Node {int nValue;int *pnValue; }Node;void PrintArr(int *pnArr, int nLen) {for (int i = 0; i < nLen; i++){printf("%d ", pnArr[i]);}printf("\n"); }void InsertSort(Node *pnodeArr, int nLen) {int i;for (i = 0; i < nLen; i++){Node tmp = pnodeArr[i];int j;for (j = i; j > 0 && tmp.nValue < pnodeArr[j-1].nValue; j--){pnodeArr[j] = pnodeArr[j - 1];}pnodeArr[j] = tmp;} } //排序的過程 void RandomArr(int *pnArr, int nLen) {int i;Node *pnodeArr = (Node *)malloc(sizeof(Node) * nLen);int *pnArrTmp = (int *)malloc(sizeof(int) * nLen);srand(time(NULL));for (i = 0; i < nLen; i++){pnArrTmp[i] = pnArr[i];pnodeArr[i].nValue = rand() % 1000;//給一個隨機的數據,根據隨機數據,進行排序pnodeArr[i].pnValue = &pnArrTmp[i];//存儲的是每個數據的地址}InsertSort(pnodeArr,nLen);//進行插入排序,就是為數組中的元素賦予的優先級,按優先級進行排序for (i = 0; i < nLen; i++){pnArr[i] = *(pnodeArr[i].pnValue);//存儲的是按優先級排列的數據,因為是按優先級排好的數} }int main() {int nArr[10];srand(time(NULL));for (int i = 0; i < 10; i++){nArr[i] = rand()%100;}PrintArr(nArr, 10);RandomArr(nArr, 10);PrintArr(nArr, 10);system("pause");return 0; } </span>
總結