代码改变世界

快速排序算法(c++)

2010-04-07 16:56  Phoenix'K  阅读(3385)  评论(4编辑  收藏  举报

 

   眼看就要走进社会,开始应聘各大公司了。

   抽空学习了一下排序,听闻遇见这些排序算法的概率是到达80%以上,而且是手写的那种,这不,我也开始弄弄,千万不能载在这个上面,这个估计都是很值钱的答题。

    快速排序算法是基于分治策略的一个排序算法,基本思想是对于输入的数组array[begin:end]按一下三个步骤进行排序:

  1. 分解:以array[begin]为基准元素将array[begin:end]划分为3段array[begin:middle],array[middle],array[middle+1:end],是第一部分的元素小于array[middle],第三部分的元素大于array[middle],下标middle在划分过程中确定。

  2. 递归求解,通过调用递归算法对array[begin:middle]和array[middle+1:end]进行排序。

  3. 合并求解,由于排序是就地进行,所以当array[begin:end]排序好之后,不用执行其他的运算。

实现的算法如下:

1 #include <iostream>
2  using namespace std;
3
4 int Partition(int *pData,int low,int high)
5 {
6 int i = low;
7 int j = high + 1;
8 int temp = pData[low];
9 while(true){
10 while(pData[++i]<temp&&i<high);
11 while(pData[--j]>temp);
12 if(i>=j)
13 break;
14 if(i<j){
15 int temp = pData[i];
16 pData[i] = pData[j];
17 pData[j] = temp;
18 }
19 }
20 pData[low] = pData[j];
21 pData[j] = temp;
22 return j;
23 }
24
25 int QuickSort(int *pData,int low,int high)
26 {
27 if(low<high)
28 {
29 int tx = Partition(pData,low,high);
30 QuickSort(pData,low,tx - 1);
31 QuickSort(pData,tx+1,high);
32 }
33 }
34
35 int main()
36 {
37 int pData[10]={7,5,9,3,4,1,8,2,6,10};
38 for(int i = 0;i<10;++i)
39 cout<<pData[i]<<' ';
40 cout<<endl;
41 QuickSort(pData,0,9);
42 for(int i = 0;i<10;++i)
43 cout<<pData[i]<<' ';
44
45 return 0;
46 }
47

可以证明快速排序在平均情况下的时间复杂性是O(nlogn),快速排序时不稳定的排序。