快速排序 思想 快速排序算法 例 确定1个数值 大的在后面 小的那前面 在以数值为中心分割 前后2个数组分别做快速排序~如此递归! 下面是1个demo 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对...
算法导论上7.4.1小节说 PARTITION 产生两个子问题,总的大小为n-1. 为什么是n-1呢? 不是每次PARTITION都可以确定一个元素在数组中的位置吗,那么传给PARTITION的数组的元素个数应该越来越少呀,怎么会总是n-1呢? 谁能帮帮我吗?谢谢!
public class QuickSort1 { void QuickSort(String[] pData, int left, int right) { int i, j; // int iTemp; String middle, strTemp; i = left; j = right; middle = pData[(left + right) / 2]; do { while ((pData.compareTo(middle) 0) && (j > left)){ j--; } if (i // iTemp = pDataNum; // pDataNum = pDataNum[j]; // pDataNum[j] = iTemp; i++; j--; } } while...
详细出处参考:http://www.jb51.net/article/21008.htm[code] def quick_sort(ls): return [] if ls == [] else quick_sort([y for y in ls[1:] if y < ls[0]]) + [ls[0]] + quick_sort([y for y in ls[1:] if y >= ls[0]]) if __name__ == '__main__': l1 = [3,56,8,1,34,56,89,234,56,231,45,90,33,66,88,11,22] l2 = quick_sort(l1) print l1 print l2 [/code]注意:quick_sort函数中的代码是在一行里面的
def qsort(list)
return [] if list.size ==0
x,*xs = list
small,big = xs.partition { |item| item
假设知道最大值和最小值范围。 首先取center = (max + min) / 2 然后 > center的放入一边, < center 的放入一边。 统计两边的个数,然后修改max和min,重新做。 像你说的,如果固定的100万,可以把center 设置为靠近100万的值。
这是算法引论中介绍的快速排序算法: [code]QUICKSORT(A,p,r) 1 if p < r 2 then q <-- PARTITION(A,p,r) 3 QUICKSORT(A,p,q) 4 QUICKSORT(A,q + 1,r) PARTITION(A,p,r) 1 x <--- A[p] 2 i <--- p - 1 3 j <--- r + 1 4 while TRUE 5 do repeat j <--- j - 1 6 until A[j] <= x 7 repeat i <--- i + 1 8 until A >= x 9 if i < j 10 ...
[code]
#include "istream.h"
#include "ostream.h"
void qsort(int[],int,int);
void main()
{
int a[]={6,2,4,5,1,3};
int len=sizeof(a)/sizeof(int);
qsort(a,0,len-1);
for(int i=0;i
#include
对于快速排序的理解 这两天一直在看排序的算法,当看到快速排序的时候卡了,真是那个郁闷啊。之前几个排序(选择、冒泡......)很快就可以过了。 可是看到快速排序的时候就怎么的也不能理解。 然后就到网上去搜了下,搜到的也就这么几种解释,多数都是大同小异。 网上搜到的,解析得也有点官方,看了会觉得还是看不懂。 怎么的......只能自己慢慢理解吧! 最后......也算是有点小成就吧,自己能理解,不知道对还是不对。 ...