数据结构--排序算法--快速排序

来源:互联网 发布:淘宝 店招 代码 编辑:程序博客网 时间:2024/05/24 03:05
思路:选择数组第一个元素,是的数组中小于等于其的数放在这个数的左边,大于其的数放在右边,左右两边分别调用递归排序,则最后都有序。
首先将划分值放在数组最后,建立一个小于等于区间,初始长度为0,从左往右遍历数组,当前值大于划分值时,继续遍历,当前值小于划分值时,将当前值与小于等于区间后的数调换位置,并将小于等于区间向右扩一个位置,当遍历到最后一个元素,将划分值与小于等于区间后第一个值对换,即完成一次排序。
int partition(int * A, int left, int right){int i= left,j= right;int x = A[left];while (i < j){while (i <j && A[j]>x)--j;if (i < j)A[i++] = A[j];while (i <j&&A[i] < x)++i;if (i < j)A[j--] = A[i];}A[i] = x;return i;}void qsort(int * A, int left, int right)//递归将关键字两边分成有序的数组{if (left < right){int p1 = partition(A, left, right);qsort(A, left, p1 - 1);qsort(A, p1 + 1, right);}}int* quickSort(int* A, int n) {qsort(A, 0, n - 1);return A;}void main() {      for (int i = 0; i < n; i++){cout << A[i] << endl;}       quickSort(A, n);cout << "快速排序后的结果为: " << endl;for (int i = 0; i < n; i++){cout << A[i] << endl;}}

原创粉丝点击