zoukankan      html  css  js  c++  java
  • 算法练习5---快速排序Java版

    基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    例如 3 1 5 2 7 9 3 0

    首先以3为基准数,基准数的意思就是以这个数为参考,其他数和它做比较,现在例如有两个人,分别从左边和右边开始找,右边的人要找到比基准数3小的数,左边的人找比基准数3大的数,找到以后进行交换,右边的人先开始找,例如上面的数组,右边的人从0开始找,0比3小,记录下这个数字,左边的人从3开始找,找到5比3大,  ,现在把这两个数交换位置得到新的数组3 1 0 2 7 9 3 5,右边的人继续重复上述步骤找到2,左边的人到了2也没有比3大的数字,于是两个人在数字2相遇了,就把基准数3和这个2交换,得到新的数组2 1 0 3 7 9 3 5,把3看做分割点,整个数组分为两部分,左边的2 1 0和右边的7 9 3 5重复上述步骤继续排序

    java代码如下:

    public class QuickSort {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            QuickSort qs = new QuickSort();
            int[] score = {10,9,8,7,6,5,4,3,2,1};
            qs.quickSort(score,0,score.length-1);
            for(int i=0;i<score.length;i++){
                System.out.print(score[i]+"   ");
            }
        }
    
        public void quickSort(int[] a,int left,int right){
            int i,j,t,temp;
            if(left>right)
                return;
            i= left;
            j = right;
            temp = a[left];
            while(i!=j){
                while(a[j]>=temp && i<j)
                    j--;
                while(a[i]<=temp && i<j)
                    i++;
                if(i<j){        
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
            }
            a[left]=a[i];
            a[i]=temp;
            quickSort(a,left,i-1);
            quickSort(a,i+1,right);
            
        }
    
    }

    执行结果:

    1   2   3   4   5   6   7   8   9   10 

     

  • 相关阅读:
    SharePoint客户端开发:增加用户信息到用户信息列表
    Query Options的一些用法(5):日历的处理
    User Profile Service卡在Starting的解决方法
    python enumerate用法
    希腊字母的发音
    在Linux下安装go语言环境
    Gradle的安装与使用
    学习正太分布及极差、移动极差、方差、标准差等知识点
    招聘还是炫耀,设计模式是装逼利器?
    Silverlight + RIA Service的SUID的实例。
  • 原文地址:https://www.cnblogs.com/paopaoquan/p/6368204.html
Copyright © 2011-2022 走看看