课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java中常用的三种排序算法
  • Java中常用的三种排序算法

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-07

  • 昆明Java培训机构的老师今天给大家讲Java中常用的三种排序算法。

    插入排序

    插入排序的概念比较简单,就像平时玩扑克一样,将后面来的数插入到前面序列中,在插入的时候我们默认前面的序列已经是有序的。

    public class InsertSort {

    public static void insertSort(int[] a){

    int i, j;

    int n =a.length;

    int target;

    for (i = 1; i < n; i++) {

    j = i;

    target = a[i];

    while (j > 0 && target < a[j-1])

    {

    a[j] = a[j-1];

    j--;

    }

    a[j] = target;

    }

    }

    public static void main(String[] args){

    int[] a={1,5,9,4,10,8,7};

    insertSort(a);

    for(int i= 0;i<a.length;i++){

    System.out.print(a[i]+",");

    }

    }

    }

    快速排序

    快速排序是一种选择排序,在序列中选取一个中间值,是左边的数全部不大于(不小于)这个中间值,右边的数全部不小于(不大于)这个数。使整个序列分成左右两个分序列,然后以递归的方式,使两边的数据集按上述规则 理,直到数据集的元素数不少于一个。

    public class QuickSort {

    public static int gerMark(int[] a, int left ,int right){

    int mark = a[left];

    while(left<right){

    while(left<right&&mark<a[right]){

    right--;

    }

    a[left]=a[right];

    while(left<right&&mark>a[right]){

    left++;

    }

    a[right]=a[left];

    }

    a[left]= mark;

    return left;

    }

    public static void quickSort(int[] a, int left ,int right){

    if(left<right){

    int middle = gerMark(a,left,right);

    quickSort(a,left,middle-1);

    quickSort(a,middle+1,right);

    }

    }

    public static void main(String[] args){

    int[] a={7,2,5,4,12};

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

    for(int i= 0;i<a.length;i++){

    System.out.print(a[i]+",");

    }

    }

    }

    归并排序

    归并排序也是以递归的方式进行排序,但是它是插入排序的延伸,我们要以递归的逆过程和插入排序的二维插入(插入排序是一个一个插入,归并排序是一组数据插入另一组数据)来思考,首先可以想象,整个序列相当于一个 节点,经过不断地递归划分成为一个二叉树,直到每个节点都只有一个元素,再一层一层地向上进行二维的插入排序。

    public class MergeSort {

    public static int[] mergeSort(int[] a, int left,int right){

    int middle = (left+right)/2;

    if(left<right){

    mergeSort(a,left,middle);

    mergeSort(a,middle+1,right);

    merge(a,left,middle,right);

    }

    return a;

    }

    public static void merge(int[] a ,int left ,int middle,int right){

    int[] temp = new int[right-left+1];

    int i=left;

    int j=middle+1;

    int k=0;

    while(i<=middle&&j<=right){

    if(a[i]<a[j]){

    temp[k++]=a[i++];

    }

    else{

    temp[k++]=a[j++];

    }

    }  

    while(i<=middle){

    temp[k++]=a[i++];

    }

    while(j<=right){

    temp[k++]=a[j++];

    }

    for(int m=0;m<temp.length;m++){

    a[left+m] = temp[m];

    }

    }

    public static void main(String[] args){

    int[] a={8,99,37,10,51,109};

    mergeSort(a,0,a.length-1);

    for(int i= 0;i<a.length;i++){

    System.out.print(a[i]+",");

    }

    }

    }

    学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:java程序员:isEmpty与null、""的区别

下一篇:【昆明达内Java培训】JavaEE开发基础

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56