快速排序2
算法:
1、從數列中挑出一個元素,稱為 "基準"(pivot),
2、重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
3、遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
07.void QuickSort(int *arr, int left, int right) 08.{ 09. int i,j; 10. if(left<right) 11. { 12. i=left;j=right; 13. arr[0]=arr[i]; //準備以本次最左邊的元素值為標準進行劃分,先保存其值 14. do 15. { 16. while(arr[j]>arr[0] && i<j) 17. j--; //從右向左找第1個小于標準值的位置j 18. if(i<j) //找到了,位置為j 19. { 20. arr[i] = arr[j]; 21. i++; 22. } //將第j個元素置于左端并重置i 23. while(arr[i]<arr[0] && i<j) 24. i++; //從左向右找第1個大于標準值的位置i 25. if(i<j) //找到了,位置為i 26. { 27. arr[j] = arr[i]; 28. j--; 29. } //將第i個元素置于右端并重置j 30. }while(i!=j); 31. arr[i] = arr[0]; //將標準值放入它的最終位置,本次劃分結束 32. quicksort(arr, left, i-1); //對標準值左半部遞歸調用本函數 33. quicksort(arr, i+1, right); //對標準值右半部遞歸調用本函數 34. } 35.}?
轉載于:https://www.cnblogs.com/yl-saber/p/6933534.html
總結
- 上一篇: 【NOIP2016】换教室
- 下一篇: Chapter 05 绘图基础