美文网首页
排序算法

排序算法

作者: 过河卒sc | 来源:发表于2018-10-29 16:49 被阅读0次

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

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

      本文标题:排序算法

      本文链接:https://www.haomeiwen.com/subject/reagzftx.html