排序算法

1.插入排序

public void insertArray(Integer[] in ) {

int tem =0;

    int num =0;

    int upnum =0;

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

for (int j = i -1; j >=0; j--) {

num++;

            if ( in [j +1] < in [j]) {

tem = in [j +1]; in [j +1] = in [j]; in [j] = tem;

                upnum++;

            }else {

break;

            }

}

}

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

System.out.print( in [i]);

        if (i < in .length -1) {

System.out.print(",");

        }

}

System.out.println();

    System.out.println("插入排序循环次数:" + num);

    System.out.println("移动次数:" + upnum);

    System.out.print("\n\n\n");

}

比较两个值的大小,如果后边的值比前边的值小,将后边的值与前边的值互换,如果后边的值比前边的值大,就继续比较后边的两个值

2.选择排序

//选择排序

public void chooseArray(Integer[] in ) {

int tem =0;

    int num =0;

    int upnum =0;

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

for (int j =0; j < in .length -1; j++) {

num++;

            if ( in [j +1] < in [j]) {

tem = in [j +1]; in [j +1] = in [j]; in [j] = tem;

                upnum++;

            }

}

}

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

System.out.print( in [i]);

        if (i < in .length -1) {

System.out.print(",");

        }

}

System.out.println();

    System.out.println("选择排序循环次数:" + num);

    System.out.println("移动次数:" + upnum);

    System.out.print("\n\n\n");

}

循环将小的值放到前边

3.冒泡排序

//冒泡排序

public void efferArray(Integer[] in ) {

int tem =0;

    int num =0;

    int upnum =0;

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

for (int j = i; j < in .length -1; j++) {

num++;

            if ( in [j +1] < in [i]) {

tem = in [j +1]; in [j +1] = in [i]; in [i] = tem;

                upnum++;

            }

}

}

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

System.out.print( in [i]);

        if (i < in .length -1) {

System.out.print(",");

        }

}

System.out.println();

    System.out.println("冒泡排序循环次数:" + num);

    System.out.println("移动次数:" + upnum);

    System.out.print("\n\n\n");

}

冒泡排序是选择排序的升级版,能够一定限度的减少循环的次数

总结

选择排序是最原始的排序算法,运行结果不稳定,作为了解就行,循环次数为n*n次

插入排序是选择排序的改良版,利用break减少了循环的次数,运行结果稳定,循环次数为n*n~n次比较,n*n~1次插入

冒泡排序是插入排序的改良版,同时也牺牲了运行开销,运行结果稳定,循环次数为n*n~n次

快速排序是冒泡排序的升级版,但是运行结果不是很稳定,循环次数为n*n~n*log n次

归并排序(合并排序)是现在应用最广的排序算法,java1.7后Collections.sort使用的默认排序就是归并排序,运用化整为零的思想,将源集合分成若干小集合最好合并结果,运行结果稳定,循环次数为n*log n次

数学知识补充log n意思是2的几次方等于n,例如log 1=0,log 2=1,log 4=2,log 8=3

当然,还有希尔排序,堆排序在这里就不多说了

参考:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,355评论 0 9
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,319评论 0 19
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,953评论 0 2
  • 排序算法几种分类方式: 1,稳定排序和不稳定排序 如果a==b, 当排序之前a在b的前面,排序后,a仍然在b...
    fly_ever阅读 447评论 0 0
  • ◆★◆酷学多纳是新东方旗下2~8岁权威儿童教育品牌,目前已覆盖亿万用户。以多纳学英语App为起点,根据家长及小朋友...
    bf68280758c2阅读 1,349评论 2 1