JAVA简单排序之快速排序

这两天笔试题看的多,感觉基本排序还是要掌握的,写篇博客谈谈我对快排的理解吧。

首先,快排快排顾名思义是一种很快速的排序方法,它是冒泡排序的改进版,下面来谈谈它的原理,快速排序是利用一个中间数(一般都去第一个数,这里命名为standard)将一堆数分为大小不同的2个部分,中间数的左边的数一定全都比右边的数小(也就是小于中间值),而右边的数全都大于中间值,然后中间值左边和右边再次进行快排,直到全部排好序为止。

下面来谈谈实现步骤:

1.首先定义i  j分别为数组的第一个和最后一个数的下标

2.确定标准值,遍历数组,从右往左找,找到一个小于standard的数记为[Aj]

3.遍历数组,从左往右找,找到一个大于standard的数记为[Ai]

4.交换这两个数

5.当i=j时,把该位置和standard位置交换

6.standard左边和右边继续快排,直到排好序为止

假设要排的数组为:A[8] ={ 5 2 8 9 2 3 4 9 }

           选择 standard = 5, 开始时 i=0,j=5

  index       0    1    2    3    4    5   

开始:            5  9  3  7  4  6

                       i                    j 

第一次找         5  9  3  7  4  6

                            i            j         

交换:            5  4  3  7  9  6

                           i            j           

第二次找        5  4  3  7  9  6

                              ij     

                      

调整standard:  3  4  5  7  9  6

之后用递归就行。下面贴代码:

public static void kuaisu(int[] a,int low,int high){
		//找到递归算法的出口  
        if( low > high) {  
            return;  
        }  
        //声明要交换的两个值的位置
        int i = low;  
        int j = high;  
        //确定一个标准值 
        int standard = a[ low ];  
        //完成一趟排序  
        while( i< j) {  
            //从右往左找到第一个小于标准值的数  
            while(i<j && a[j] > standard){  
                j--;  
            }  
            //从左往右找到第一个大于标准值的数  
            while( i<j && a[i] <= standard) {  
                i++;  
            }  
            //交换 这两个数 
            if(i<j) {  
                int p = a[i];  
                a[i] = a[j];  
                a[j] = p;  
            }  
        }  
        //调整标准值的位置  
        int p = a[i];  
        a[i] = a[low];  
        a[low] = p;  
        //对标准值左边的数快排  
        kuaisu(a, low, i-1 );  
        //对标准值右边的数快排  
        kuaisu(a, i+1, high);  
      
	}
public static void main(String[] args) {
		// TODO Auto-generated method stub
       int[]a={7,2,3,9,5,6};
       //中间值
      kuaisu(a,0,a.length-1);
     
       for(int i=0;i<a.length;i++){
    	   System.out.println(a[i]);
       }
       
	}

不足之处还望指正。

猜你喜欢

转载自blog.csdn.net/qq_29694477/article/details/82670954
今日推荐