31.快速排序:是對氣泡排序的一種改進,其基本思想是選取乙個記錄作為樞軸,經過一趟排序,將整段序列劃分為兩個部分,其中一部分的值都小於樞軸,另一部分都大於樞軸,然後繼續對這兩部分進行排序,從而使整個序列達到有序。
1)我們從待排序的記錄序列中選取乙個記錄(通常第乙個)作為基準元素(稱為key)key=arr[left],然後設定兩個變數,left指向數列的最左部,right指向資料的最右部。
2) key首先與arr[right]進行比較,如果arr[right]key則我們只需要將right--,right--之後,再拿arr[right]與key進行比較,直到arr[right](3) 如果右邊存在arr[right]key,則將arr[right]=arr[left],如果arr[left](4) 然後再移動right重複上述步驟
(5) 最後得到 23 ,再對左子數列與右子數列進行同樣的操作。最終得到乙個有序的數列。
//快速排序:
#include//遞迴實現:
void quicksort(int *arr, int low, int high)
arr[i] = tmp;
quicksort(arr, low, i - 1); // 遞迴呼叫
quicksort(arr, i + 1, high); }}
int main()
; int len = sizeof(arr) / sizeof(int);
quicksort(arr,0,7);
for (int i = 0; i < len; i++)
printf("\n");
return 0;
}//非遞迴
//劃分演算法
int partition(int a, int low, int high)
if (boundary + 1 < right) //確保右分割槽存在
while (!s.empty())
if (boundary + 1 < r) //確保右分割槽存在
} }}
int main()
; int len = sizeof(arr) / sizeof(int);
quicksort(arr,0,7);
for (int i = 0; i < len; i++)
printf("\n");
return 0;
}
歸併排序: 快速排序 堆排序 歸併排序
快速排序 includeusing namespace std int a 8 int sz sizeof a sizeof int int partition int a,int p,int r int main const int sz sizeof a sizeof int 堆化 保持最大堆的...
快速排序,歸併排序,堆排序
l r 1在奇數長度陣列的中間,偶數長度陣列的左半邊最後乙個,極限情況下陣列只有兩個數,i遇到第乙個數就會停下,此時模擬i,j下標的數有無交換的情況,會發現j在停下來時都位於第乙個數的位置,因此用j,j 1才不會越界 l r 1 1在奇數長度陣列的中間往右第乙個,偶數長度陣列的右半邊第乙個,極限情況...
排序演算法之快速排序 歸併排序,堆排序
一趟排序 取區間內第乙個元素作為基準,將該元素放在適當的位置,此時基準數左邊的數都比它小,基準數右邊的數都比大。接下來便用同樣的方法分別對左右兩邊的資料進行排序,直到序列中沒有元素或只有乙個元素。int partition int a,int low,int high a low temp retu...