手记

java的快速排序

写了2个形式的,原理差不多,都是找基数,递归到一个结束。但是细节和交换上有所不同。

相关code
package day20180728;

public class QuickSort{

    public static void quickSort(int[] arr,int lt,int rt)
    {
    //只有一个元素的时候,递归出口
        if(lt>=rt)
            return;

       int temp=arr[lt];
       int st=lt,end=rt;

       while(st<end)
       {
           while(st<end&&temp<=arr[end])
           {
               end--;
           }

           while(st<end&&temp>=arr[st])
           {
               st++;
           }

           if(st<end)
           {
           int tag=0;
           tag=arr[end];
           arr[end]=arr[st];
           arr[st]=tag;
           }

        System.out.println("每一次左右轮换的结果为");
           display(arr);
           System.out.println();
           System.out.println("#########");
       }
        arr[lt]=arr[st];
        arr[st]=temp;

        System.out.println("基数为:"+st);

        System.out.println("基数定位的结果为:");
        System.out.println("------****-------");
        display(arr);
        System.out.println("++++++++++");

       //递归基数的左边部分。
        quickSort(arr,lt,st-1);    
        quickSort(arr,st+1,rt);

    }

    public static void display(int[] arr)
    {

        for(int elem:arr)
            System.out.print(elem+" ");
    }

    public static void main(String[] args)
    {

        int[] arr= {11,6,8,22,33,78,65,0};

        quickSort(arr,0,arr.length-1);

        display(arr);

    }
}

结果

每一次左右轮换的结果为
11 6 8 0 33 78 65 22 
#########
每一次左右轮换的结果为
11 6 8 0 33 78 65 22 
#########
基数为:3
基数定位的结果为:
------****-------
0 6 8 11 33 78 65 22 ++++++++++
每一次左右轮换的结果为
0 6 8 11 33 78 65 22 
#########
基数为:0
基数定位的结果为:
------****-------
0 6 8 11 33 78 65 22 ++++++++++
每一次左右轮换的结果为
0 6 8 11 33 78 65 22 
#########
基数为:1
基数定位的结果为:
------****-------
0 6 8 11 33 78 65 22 ++++++++++
每一次左右轮换的结果为
0 6 8 11 33 22 65 78 
#########
每一次左右轮换的结果为
0 6 8 11 33 22 65 78 
#########
基数为:5
基数定位的结果为:
------****-------
0 6 8 11 22 33 65 78 ++++++++++
每一次左右轮换的结果为
0 6 8 11 22 33 65 78 
#########
基数为:6
基数定位的结果为:
------****-------
0 6 8 11 22 33 65 78 ++++++++++
0 6 8 11 22 33 65 78 

另外一个版本
code如下

package day20180728;

public class qSort {

    public static void ksort(int[] arr,int left,int right)
    {
        if(left>=right)
            return ;
        int tag=arr[left];
        int i=left,j=right;

        while(i<j)
        {

            while(i<j&&arr[i]<=arr[j])
            {
                j--;
            }

            if(i<j)
            {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                i++;
            }

            while(i<j&&arr[j]>=arr[i])
            {
                i++;
            }

            if(i<j)
            {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                j--;
            }

        }

        System.out.println("基数i为:"+i);

        System.out.println("基数定位的结果为:");
        System.out.println("------////-------");
        display(arr);

         System.out.println("/////////////");
           //递归基数的左边部分。
         ksort(arr,left,i-1);    
            ksort(arr,i+1,right);
    }

    public static void display(int[] arr)
    {

        for(int elem:arr)
            System.out.print(elem+" ");
    }

    public static void main(String[] args) {

        int[] arr= {11,66,8,22,33,78,65,0};
        ksort(arr,0,arr.length-1);

        display(arr);

    }

}

结果

基数i为:2
基数定位的结果为:
------////-------
0 8 11 22 33 78 65 66 /////////////
基数i为:0
基数定位的结果为:
------////-------
0 8 11 22 33 78 65 66 /////////////
基数i为:3
基数定位的结果为:
------////-------
0 8 11 22 33 78 65 66 /////////////
基数i为:4
基数定位的结果为:
------////-------
0 8 11 22 33 78 65 66 /////////////
基数i为:7
基数定位的结果为:
------////-------
0 8 11 22 33 66 65 78 /////////////
基数i为:6
基数定位的结果为:
------////-------
0 8 11 22 33 65 66 78 /////////////
0 8 11 22 33 65 66 78 

快速排序设计到了递归,有点不好理解,相关东西可以网上多查看一下

0人推荐
随时随地看视频
慕课网APP