【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

简单选择排序:

原理:设所排序序列的记录个数为n。i取1,2,…,n-1,每次从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。性能:最好、最坏和平均时间复杂度均为O(n2),不稳定排序算法。

JAVA实现:

 1     //简单选择排序
 2     public static int[] simple_choose_sort(int[] source) {
 3
 4         int length = source.length;
 5         int small;
 6
 7         for(int i=0;i<length-1;i++) {//要进行length-1趟排序
 8
 9             small = i; //每趟开始时假设第一个元素最小
10
11             for(int j=i+1;j<length;j++) {//对于i后面的每个元素
12
13                 if(source[small]>source[j]) {
14
15                     small = j;//如果有元素比目前最小的元素还小,就记下它的下标
16
17                 }
18             }
19             swap(source,i,small);//交换第一个元素和最小的元素
20         }
21         return source;
22     }

直接插入排序:

原理:将序列中第一个元素作为一个有序序列,将剩下的n-1个元素按关键字大小一次插入该数列,每次插入一个数据后保持该序列依然有序,n-1趟就可以数组排序完成。

性能:最好的时间复杂度为n,最坏为n2,该算法为稳定算法。

JAVA实现:

 1 //直接插入排序
 2     private static  int[] direct_insert_sort(int[] source) {
 3
 4         int length = source.length;//数组的长度
 5
 6         for(int i=1;i<length;i++) {//执行length-1趟
 7
 8             int j = i;
 9             int compare = source[i];//先保存当前元素的信息
10
11             while(j>0&&source[j-1]>compare) {//source[j-1]>compare为稳定算法,source[j-1]>=compare为不稳定
12
13                 source[j] = source[j-1];//从后往前比较前面的i个元素,如果compare比前一个小,就将该元素后移
14                 j--;
15             }
16             source[j] = compare;//将插入元素存入找到的插入位置
17             }
18             return source;
19     }

冒泡排序算法:

原理:最多比较n-1趟,第1趟是从第1个到第n个,相邻的两个元素比较,如果前面的小于后面的,就交换位置,第二趟从第2个到第n个,重复第一趟的工作。如果某一趟没有交换元素,那么就可以断定已经排序完成

性能:最小时间复杂度n,最大为n2,该算法为稳定算法

JAVA实现:

//冒泡排序算法private static int[] bubble_up_sort(int[] source){int length = source.length;//数组的长度int j,last;int i=length-1;while(i>0) {last = 0;//last设置为0,最为一个标志,如果下面的for循环没有改变last,这i设置为0,排序完毕for(j=0;j<i;j++) {if(source[j+1]<source[j]) {swap(source,j+1,j);//交换两个数
                    last = j;//记录最后一次交换数据的位置,last后面的元素已经有序,下次就不用去比较了
                }}i=last;//如果某一趟中没有交换数据,则last为0,通知i被设置为0,排序完毕
        }return source;}

完整的工程代码:

  1 /**
  2  * This program shows all kinds of sort-algorithm
  3  * @author hewenwu
  4  * @version 1.0 2014/4/15
  5  * */
  6
  7 public class Algorithm {
  8
  9
 10
 11     public static void main(String[] args) {
 12
 13         int[] source = new int[20];
 14
 15         //获取随机数组
 16         int i=0;
 17         while(i<20) {
 18             source[i] = (int) (Math.random()*100);
 19             i++;
 20         }
 21
 22         System.out.println("原始数组为:");
 23         print_array(source);
 24
 25         System.out.println ("简单选择排序后的数组:");
 26         print_array(simple_choose_sort(source));
 27
 28         System.out.println ("直接插入排序后的数组:");
 29         print_array(direct_insert_sort(source));
 30
 31         System.out.println ("冒泡排序后的数组:");
 32         print_array(bubble_up_sort(source));
 33
 34     }
 35
 36     //简单选择排序
 37     public static int[] simple_choose_sort(int[] source) {
 38
 39         int length = source.length;
 40         int small;
 41
 42         for(int i=0;i<length-1;i++) {//要进行length-1趟排序
 43
 44             small = i; //每趟开始时假设第一个元素最小
 45
 46             for(int j=i+1;j<length;j++) {//对于i后面的每个元素
 47
 48                 if(source[small]>source[j]) {
 49
 50                     small = j;//如果有元素比目前最小的元素还小,就记下它的下标
 51
 52                 }
 53             }
 54             swap(source,i,small);//交换第一个元素和最小的元素
 55         }
 56         return source;
 57     }
 58
 59     //直接插入排序
 60     private static  int[] direct_insert_sort(int[] source) {
 61
 62         int length = source.length;//数组的长度
 63
 64         for(int i=1;i<length;i++) {//执行length-1趟
 65
 66             int j = i;
 67             int compare = source[i];//先保存当前元素的信息
 68
 69             while(j>0&&source[j-1]>compare) {//source[j-1]>compare为稳定算法,source[j-1]>=compare为不稳定
 70
 71                 source[j] = source[j-1];//从后往前比较前面的i个元素,如果compare比前一个小,就将该元素后移
 72                 j--;
 73             }
 74             source[j] = compare;//将插入元素存入找到的插入位置
 75             }
 76             return source;
 77     }
 78
 79     //冒泡排序算法
 80     private static int[] bubble_up_sort(int[] source){
 81
 82         int length = source.length;//数组的长度
 83         int j,last;
 84         int i=length-1;
 85
 86         while(i>0) {
 87
 88             last = 0;//last设置为0,最为一个标志,如果下面的for循环没有改变last,这i设置为0,排序完毕
 89
 90             for(j=0;j<i;j++) {
 91
 92                 if(source[j+1]<source[j]) {
 93
 94                     swap(source,j+1,j);//交换两个数
 95
 96                     last = j;//记录最后一次交换数据的位置,last后面的元素已经有序,下次就不用去比较了
 97                 }
 98             }
 99                i=last;//如果某一趟中没有交换数据,则last为0,通知i被设置为0,排序完毕
100         }
101         return source;
102
103     }
104
105
106     //交换两个整数
107     private static void swap(int[] source, int i, int j) {
108
109         int temp = source[i];
110         source[i] = source[j];
111         source[j] = temp;
112     }
113
114     //打印数组
115     private static void print_array(int[] source) {
116
117         for(int i=0;i<source.length;i++) {
118
119             System.out.print(source[i]+"-");
120
121         }
122         System.out.println();
123     }
124
125 }

转载于:https://www.cnblogs.com/hewenwu/p/3667434.html

【简单排序算法】:简单选择排序、直接插入排序和冒泡排序相关推荐

  1. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  2. 堆排序算法c语言筛选法,【排序】排序算法之选择排序

    排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...

  3. 【排序算法】选择排序(Selection sort)

    选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...

  4. 【排序算法】选择排序(C语言)

    [排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ​ ...

  5. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  6. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  7. 排序算法(3)选择排序

    排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...

  8. Java经典排序算法:选择排序,动图演示排序过程

    Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...

  9. C语言排序算法之选择排序

    文章目录 一.选择排序的概述 二.选择排序算法代码详解 (1)算法分析 (2)选择排序算法代码详解 三.总代码 一.选择排序的概述 选择排序(Selection sort)是一种简单直观的排序算法. ...

  10. 选择排序算法流程图_常用排序算法之选择排序

    前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...

最新文章

  1. img 在video上面_HTML,img,video无法铺满屏幕解决方法,同视频做网页背景无法全屏的解决方法...
  2. 心路历程(六)-一个人的后台
  3. python代码颜色不同_python – 两个不同颜色的颜色在同一个imshow matplotlib
  4. 集成学习(西瓜书学习)
  5. 中文导致Mybatis无效的列索引
  6. R语言是如何增强数据科学
  7. 一维数组求平均值c语言编程软件,请问一道c++编程:求一维数组中全部元素的平均值?...
  8. javascript ep
  9. ?php if ($modules) { ?,phpStudy安装鲶鱼CMS怎样开启伪静态
  10. PTAM特征点法跟踪和建图 SLAM FAST Patch
  11. 美团BERT的探索和实践
  12. 分布式系统中的CAP理论
  13. 谷歌AI人工智能:我们的原则
  14. 机器学习——回归中的相关度与R平方值及其应用
  15. 画布项目着色器(CanvasItem shaders):Godot的2D着色器
  16. CMS 执行的七个阶段
  17. Spire.XLS:一款Excel处理神器
  18. bzoj4768: wxh loves substring //后缀平衡树
  19. 雅可比(Jacobi)矩阵与行列式
  20. 内存对齐是什么?为什么要内存对齐?

热门文章

  1. python 笔记 之 练习答案-ABCD乘以9=DCBA
  2. Unity3D播放视频
  3. 怎么做办公室网络布线
  4. 怎样import(导入)过期的磁带
  5. Android Studio 使用笔记:工具窗口浮动与布局恢复
  6. CentOS下NTP安装配置
  7. 容灾技术中的数据一致性保障
  8. 关于使用DFS,BFS的一些思考总结
  9. 7820X+RTX2080Ti(Ubuntu 18.04)新机配置记录
  10. Codeforces 436D Pudding Monsters