排序算法之快速排序

来源:互联网 发布:python return怎么用 编辑:程序博客网 时间:2024/05/31 06:23

快速排序(Quicksort

快速排序是对冒泡排序的一种改进。由C. A. R. Hoare1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

快速排序算法:

一趟快速排序的算法是:

1)设置两个变量ij,排序开始的时候:i=0j=N-1

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i]

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于keyA[i],将A[i]赋给A[j]

5)重复第34步,直到i=j(3,4步中,没找到符合条件的值,即3A[j]不小于key,4A[i]不大于key的时候改变ji的值,使得j=j-1i=i+1,直至找到为止。找到符合条件的值,进行交换的时候ij指针位置不变。另外,i==j这一过程一定正好是i+j-完成的时候,此时令循环结束)。

快速排序算法实现及注释

//思想: 分治:将待排序的数组划分为两个部分 产生一个基准,左边的均小于基准 右边的均大于基准 找出基准正确的位置\然后进行递归调用void quick_sort(int *a,int low,int high){int i = low;int j = high;int key = a[low];while(i<j){//从右边开始找出比基准小的数,找到小于等于基准的数 为什么外层已经判断了i<j为什么还要判断呢? 假设如果第一个元素为最小的元素 那么j会一直递减//直到等于-1while(i<j&&a[j]>=key){j--;}if(i<j){a[i] = a[j];i++;}//从左边开始找出比基准大的数,找到大于等于基准的数while(i<j&&a[i]<=key){i++;}if(i<j){a[j] = a[i];j--;}}//条件结束时i = j,将基准放入正确的位置a[i] = key;//加判断条件是为了防止堆栈溢出if(i-low>1)quick_sort(a,low,i-1);if(high-i>1)quick_sort(a,i+1,high);}



原创粉丝点击