快速排序之C++实现

快速排序之C++实现

一趟快速排序的算法是:
  1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
  2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
  3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
  4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
  5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

一、源代码:QuickSort.cpp

 1 #include<iostream>
 2 using namespace std;
 3 /*定义输出一维数组的函数*/
 4 void print(int array[], int n)
 5 {
 6     for (int i = 0; i < n; i++)
 7     {
 8         cout << array[i] << " ";
 9     }
10     cout << endl;
11 }
12 
13 //选择基准(轴)
14 int partition(int array[], int low, int high)
15 {
16     while (low < high)
17     {
18         //low位置为轴点,low右边的不小于low左边的
19         while (low < high&&array[low] <= array[high])
20         {
21             high--;
22         }
23         int temp = array[low];
24         array[low] = array[high];
25         array[high] = temp;
26         //high位置为轴点,high左边的不大于high右边的
27         while (low < high&&array[low] <= array[high])
28         {
29             low++;
30         }
31         temp = array[low];
32         array[low] = array[high];
33         array[high] = temp;
34     }
35     return low;
36 }
37 
38 void quickSortHelp(int array[], int low, int high)
39 {
40     if (low < high)
41     {
42         //找枢轴元位置
43         int location = partition(array, low, high);
44         //递归调用
45         quickSortHelp(array, low, location - 1);
46         quickSortHelp(array, location + 1, high);
47     }
48 }
49 
50 void quickSort(int array[], int n)
51 {
52     //以第一个数组元素为基准(轴)
53     quickSortHelp(array, 0, n - 1);
54 }
55 
56 int main()
57 {
58     //定义待排序的一维数组
59     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
60     //输出原始数组
61     cout << "原始数组是:" << endl;
62     print(array, 10);
63     //对数组进行排序
64     quickSort(array, 10);
65     //输出排序后的数组
66     cout << "排序后的数组是:" << endl;
67     print(array, 10);
68     return 0;
69 }

二、运行效果

 

posted @ 2017-08-18 22:21  勇闯天涯zfc  阅读(5518)  评论(0编辑  收藏  举报