2 快速排序

2021-09-11 17:38:08 字數 1692 閱讀 4854

快速排序思想:每次找到乙個標桿,在序列中的前面部分放置比標桿小的元素,在序列後面部分放置比標桿大的元素,那麼標桿放置的位置則可以確認。待主迴圈結束,則是排序好的序列。

確認標桿位置:

在排序過程中,需要兩個前後索引index[left],index[right]。index[left]向後前進,而index[right]往前回退。這兩個索引需要找到不符合要求的元素(前面的元素比標桿大,後面的元素比標桿小),將兩者交換,待迴圈結束後,則可以放置標桿位置。

找到新的標桿:

選取index[left]和index[right]需要注意,index[left]>index[標桿] , index[right]>index[標桿]。所以index[right]的位置則是當前標桿的位置,swap(index[right],index[標桿])。

當迴圈結束後,則是排序好的序列。

例如: 5   4    6   3    1(設p1為index[left],p2為index[right])

5為標桿:

出現了不符合要求的,則swap()。

因為p2當前序列為:

3     4     1     5      6

3為新的標桿:

p2>p1,則swap(p1,p2),然後繼續迴圈

p2至此序列為:

1      3      4      5      6

#include#include#includeusing namespace std;

const int c_n=10;

//取乙個標桿,序列前放比標桿小的,後面放比標桿大的

//遍歷序列,找到不符合要求的資料,並交換

//遍歷結束,則可以放置標桿,繼續尋找新的標桿

//時間複雜度log(n)

void swap(int *a, int *b)

void quicksort(int *a,int left,int right)

} if (a[left]>a[j]) //需要判斷當前位置是否是基準值應該放的位置

swap(&a[j], &a[left]); //交換,新的基準值

quicksort(a, left, j);

quicksort(a, j + 1, right);

} return;

}void main()

; srand(time(null));

for (int i = 0; i < c_n; i++)

quicksort(a, 0, c_n);

for (int i = 0; i < c_n; i++)

cout << " " << a[i];

system("pause");

}

快速排序2

include include using namespace std int partition int a,int p,int r if ix j後退將不符合的數與主元調換,進而放到合適的位置 while a j x i if i 相等時返回分割線的位置 return i void quicks...

快速排序2

public static void quicksort2 int a,int left,int right pivot a left pivot中存的就是基準數 i left j right while i j 再找做左邊的 while a i pivot i 交換兩個數在陣列中的位置 if i ...

快速排序2

include include usingnamespacestd intpartition inta,intp,intr if ix j後退將不符合的數與主元調換,進而放到合適的位置 while a j x i if i 相等時返回分割線的位置 returni voidquicksort inta...