演算法排序 快速排序,堆排序,歸併排序

2021-09-26 05:53:35 字數 1674 閱讀 7832

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...