码迷,mamicode.com
首页 > 其他好文 > 详细

快速排序

时间:2014-07-11 20:40:00      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   color   strong   

快速排序的基本思想

通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

bubuko.com,布布扣

把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交 换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

 1 package test;
 2 
 3 import java.util.Random;
 4 
 5 /**
 6  * 快速排序平均时间复杂度为O(nlogn),最坏为O(n的平方)
 7  * @author xixingwang
 8  *
 9  */
10 public class QuickSort {
11     
12   public static void main(String[] args) {
13       int iLength = 5;
14       int[] iArgs = new int[iLength];
15       for(int i = 0; i < iLength; i++){
16           Random objRandom = new Random();
17           iArgs[i] = objRandom.nextInt(1000);
18       }
19       quickSort(iArgs,0,iArgs.length-1);
20       
21       for(int i = 0; i < iArgs.length; i++) {
22         System.out.print(iArgs[i] + " ");
23       }
24   }
25   
26   /**
27    * 递归循环数据
28    */
29   private static void quickSort(int[] args,int left,int right) {
30      if( left < right) {
31          //数据从left到right坐标的数据进行排序
32          int iIndex = partition(args,left,right); //iIndex 是基数放在数据位置
33 
34           //递归算法,对于基数左边排序
35          partition(args,left,iIndex-1); //为什么left不能从0
36           //递归算法,对于基数右边排序
37          partition(args,iIndex+1,right);//为什么 right不等于length
38      }
39   }
40   
41   /**
42    * 确定基数左边的数都比它小,右边的数都比它大 
43    */
44   private static int partition(int[] args,int left,int right) {
45       int iBase = args[left]; //基准数
46       while (left < right) {
47          //从右向左找出第一个比基准数小的数
48           while( left < right && args[right] >= iBase) {
49               right--;
50           }
51           args[left] = args[right];//比中轴小的记录移到低端 
52           
53           //从左向右找出第一个比基准数大的数
54           while( left < right && args[left] <= iBase) {
55               left++;
56           }
57           args[right] = args[left];//比中轴大的记录移到高端
58       }
59       args[left]= iBase;//中轴记录到尾
60       return left;
61   }
62 }

 

 1 public static void quickSort(int data[], int start,int end){
 2       
 3       if(start < end){
 4           int base = data[start];
 5           int left = start;
 6           int right = end;
 7           while(left < right){
 8               
 9               while(left<right&&data[left]<=base){
10                   left++;
11               }
12               data[right] = data[left];
13               while(left<right&&data[right]>=base){
14                   
15                   right--;
16                   
17               }
18               data[left] = data[right];
19           }
20           
21           data[left] = base;
22           
23           quickSort(data,start,left-1);
24           quickSort(data, left+1, end);
25           
26       }
27   }

 

快速排序,布布扣,bubuko.com

快速排序

标签:style   blog   http   java   color   strong   

原文地址:http://www.cnblogs.com/xxwacm/p/3833323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!