1. 簡單桶排序ui
void bucketSort() { int a[11]; int b; for (int i = 0; i < 11; i++) { a[i] = 0; } for (int i = 0; i < 5; i++) { scanf("%d", &b); a[b]++; } for (int i = 0; i < 11; i++) { printf("i=%d,v=%d\n", i, a[i]); } for (int i = 10; i >= 0; i--) { for (int j = 0; j < a[i]; j++) { printf("%d ", i); } } }
2. 冒泡排序code
void bubbleSort() { int a[5] = {3,-2, 0, 22, 999}; for(int i = 1; i < 5; i++) { for (int j = i-1; j < 5; j++) { if (a[j] > a[i-1]) { int tmp = a[i-1]; a[i-1] = a[j]; a[j] = tmp; } } } for (int i = 0; i < 5; i++) { printf("i=%d,v=%d\n", i, a[i]); } }
時間複雜度:O(N^2)排序
3. 快速排序class
void quickSort(int left, int right) { if ( left > right ) { return; } // 設置基準數 int refNum = a[left]; // 設置左右起點 int lPoint = left; int rPoint = right; // 當沒有碰撞的時候,不停的交換 while (lPoint != rPoint) { // 從右邊開始找,比基準數小的數字, 而後中止,注意個人判斷,若是比基準數大,rPoint向前移動一位,也就是說,若是比基準數字小,rPoint記錄的就是這個數字的位置 while (a[rPoint] >= refNum && lPoint < rPoint) { rPoint --; } // 左邊找,比基準數大的數字,而後中止 while (a[lPoint] <= refNum && lPoint < rPoint ) { lPoint ++; } // 交換位置 if ( lPoint < rPoint ) { int temp = a[lPoint]; a[lPoint] = a[rPoint]; a[rPoint] = temp; } } // 歸位基準數字,這個時候,左右標記點處於同一個位置上,也就是基準點應該在的位置 a[left] = a[lPoint]; a[lPoint] = refNum; // 交換以後,開始處理子串,基準數不須要動位置 sort(left, lPoint - 1); sort(lPoint + 1, right); }