常见算法总结

持续更新中。。。

快速排序:以第一个元素为根元素,第一趟排序目标是在19前面的元素都比19小,在19后面的都比19大。

19 (20 35 22 13 41 27 45 37) 42 15 5 10

先从最后一个元素开始,将10与根元素19比较,10小,19和10互换位置,顺序如下:

10 (20 35 22 13 41 27 45 37) 42 15 5 19

这时5也比19小,如果5再和19互换,或者接着15再和19互换位置,顺序如下:

 

10 (20 35 22 13 41 27 45 37) 42 19 15 5

这时就违背了前面定义的排序目标:在19前面的元素都比19小,在19后面的都比19大。

void quick_sort(int arr[],int left,int right){

int i=left;

int j=right;

int temp = arr[i];

while(i<j){

while(temp<=arr[j]){

  j--;

}

arr[i]=arr[j];

arr[j]=temp;

while(temp>=arr[i]){

  i++;

}

if(i-1>left){

quick_sort(arr,left,i-1);

}

if(i+1<right){

quick_sort(arr,i+1,right);

}

}

 http://canlynet.iteye.com/blog/1593540

posted @ 2012-09-25 11:14  唾手可得的树  阅读(198)  评论(0编辑  收藏  举报