zoukankan      html  css  js  c++  java
  • java中的三大排序算法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/pqwGreenhand/article/details/53581577
    一、冒泡排序

    已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],依此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

    优点:稳定,比较次数已知;

    缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。


    二、选择排序

    已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],依此类推,最后比较a[1]与a[n]的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a[n]以相同方法比较一轮,则a[2]的值一定是a[2]~a[n]中最小的。再将a[3]与a[4]~a[n]以相同方法比较一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

    优点:稳定,比较次数与冒泡排序一样,数据移动次数比冒泡排序少;

    缺点:相对之下还是慢。

    三、插入排序

    已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)

    优点:稳定,快;

    缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

    这几种代码实现:

    冒泡排序:

     for(int i=0;i<ary.length-1;i++){
    for(int j=0;j<ary.length-i-1;j++){
    if(ary[j]>ary[j+1]){
    int t = ary[j];
    ary[j]=ary[j+1];
    ary[j+1]=t;
    }
    }

    选择排序:

    for(int i=0;i<ary.length-1;i++){
    for(int j=i+1;j<ary.length;j++){
    if(ary[i]>ary[j]){
    int t = ary[i];
    ary[i]=ary[j];
    ary[j]=t;
    }
    }
    }

    插入排序:

    for (int i = 1; i < ary.length; i++) {
    int temp = ary[i];
    int j;
    for (j = i - 1; j >= 0 && temp < ary[j]; j--) {
    ary[j + 1] = ary[j];
    }
    ary[j + 1] = temp;
    }
    ————————————————
    版权声明:本文为CSDN博主「pqwGreenhand」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/pqwGreenhand/article/details/53581577

  • 相关阅读:
    C3P0连接池详解及配置
    解决a different object with the same identifier value was already associated with the session错误
    sudo su 提示没有配置JDK environment
    MySQL 5.6 双机热备
    如何用myeclispe远程调试tomcat
    Incorrect string value: '\xF0\xA1\xA1\x92' for column 'herst' at row 1
    Mysql 慢查询设置
    Mysql的主从数据库没有同步的解决办法
    新的启程
    ASP.NET程序中常用的三十三种代码
  • 原文地址:https://www.cnblogs.com/yunleijava/p/11545598.html
Copyright © 2011-2022 走看看