zoukankan      html  css  js  c++  java
  • 排序之快速排序

    快速排序是综合性能非常好的一种排序方法,它的思想是:每次选取一个数,将序列中所有比该数据小的数放到一边,反之放到另一边,然后对该数据左边的序列和右边的序列分别利用相同的方法进行继续排序。同样,以数字序列5,3,2,1,4为例,分析快排的排序过程,根据描述可以初步得出排序过程,这里以一个表格的形式展示:

    这里每次选取的数都是数组最右边的那个数字,这里第二行的排序结果是怎么出来的呢?我们还是用一张图加以解释:

     

    就像描述的那样,第一次排序是把不比4大的数放到4的左边,反之放到右边,图中蓝色和红色的原点代表遍历数组的下标,在遍历的过程中,有对数据位置的调换。下面给出示例代码:

    public class my{
        public static void main(String[] args){
            int arr[]={1,4,23,0,4,5,34,23,4354,23,12};
            quicksort(arr,0,arr.length-1);
            printArray(arr);
        }
        static void quicksort(int[] array,int left,int right){
            if(left<right){
                int position=pos(array,left,right);
                quicksort(array,left,position-1);
                quicksort(array,position+1,right);
            }
        }
        //调换数据位置,同时返回最右边那个数据最终应处的位置的下标
        static int pos(int[] array,int left,int right){
            //这里每次选取的数都是数组最右边的那个数
            int i=left,j=left,rightval=array[right],temp=0;
            for(;i<right;){
                if(array[i]>rightval){
                    i++;
                }else{//array[i]<=rightval
                    temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                    i++;
                    j++;//array[j]存放的是比rigthval大的数
                }
            }
            temp=rightval;
            array[right]=array[j];
            array[j]=temp;
            return j;
        }
        
        static void printArray(int[] array){
            for(int val:array){
                System.out.print(val+" ");
            }
            System.out.println();
        }
    }

    最后输出结果:0 1 4 4 5 12 23 23 23 34 4354

    算法分析:快排算法时间复杂度是O(nlogn),且排序过程不稳定。

     

  • 相关阅读:
    package.json 笔记
    TypeScript 笔记
    RxJS 笔记
    angular 使用Redux
    ngrx 笔记
    Node 的使用
    imoocLinux环境变量配置文件笔记
    imooc正则表达式学习笔记
    js定时器和linux命令locate
    linux修改PATH环境
  • 原文地址:https://www.cnblogs.com/codeMedita/p/7405753.html
Copyright © 2011-2022 走看看