快速排序之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 }
二、运行效果