快速排序法

Posted on 2010-03-03 17:53  FreeSkyCD  阅读(452)  评论(0)    收藏  举报

阅读: 5 评论: 0 作者: 战歌部落 发表于 2010-03-03 17:53 原文链接

快速排序

    快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧) 的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。

java
 1 void quickSort(int[] arr, int left, int right){
 2     int p = partition(arr, left, right);
 3     quickSort(arr, left, p-1);
 4     quickSort(arr, p+1, right);
 5 }
 6 //1:
 7 int partition(int[] arr, int left, int right){
 8     int p = left/2 + right/2;
 9     while(left < right){
10         while(left < p && arr[left] <= arr[p]){
11             left++;
12         }
13         while(right > p && arr[right] >= arr[p]){
14             right--;
15         }
16         swap(arr[left], arr[right]);
17     }
18     return p;
19 }
20 
21 /*2: compare首先从high位置向前搜索找到第一个小于compare值的索引,并置换(这时high索引位置上的值为compare值);然后从 low位置往后搜索找到第一个大于compare值的索引,并与high索引上的值置换(这时low索引位置上的值为compare值);重复这两步直到 low=high为止。*/
22 int partition(int[] arr, int left, int right){
23     compare = a[left]; 
24      while(left < right){
25          while(left<right && a[right]>=compare){    
26               right--
27         }
28          swap(arr[left], arr[right]);
29 
30          while(left<high && a[left]<=compare){
31               left++
32         }
33         swap(arr[left], arr[right]);
34      } 
35      return left;
36 }


评论: 0 查看评论 发表评论

找优秀程序员,就在博客园


最新新闻:
· IBM发布第五代X架构 打破X86系统30年技术局限(2010-03-03 22:47)
· 互联网手机业务成香馍馍 上海电信盯牢3G市场(2010-03-03 22:38)
· Twitter信息总量即将突破100亿条大关(2010-03-03 22:34)
· Opera为何无法进一步拓展市场(2010-03-03 21:38)
· Symbian版 Skype登陆诺基亚Ovi Store(2010-03-03 21:04)

编辑推荐:Opera为何无法进一步拓展市场

网站导航:博客园首页  个人主页  新闻  闪存  小组  博问  社区  知识库

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3