选择排序、插入排序 的思想(java)
来源:互联网 发布:吴鉴鹰单片机开发板 编辑:程序博客网 时间:2024/05/29 01:51
一、选择排序
选择排序的思想很简单,特别容易理解,先找到整个数组中最小的数字,将它和第一个数字交换位置,一轮循环结束;第二轮在剩余的数中找到一个最小值,并将其与数组中的第二个数字交换位置,以此类推…
它有两个很鲜明的特点:
* 数字排序运行的时间和输入数字的顺序没有关系 每次找数组中最小的数字对下一次查找没有提供任何的信息,所以不管怎么样的输入,都会进行N次比较,方能完成排序。
* 数据的移动最少 相比较冒泡排序两两比较就交换位置的不定性来说,选择排序的交换次数和数组的大小成线性关系。
很简单,代码如下:
public class ChooseSort { public static void main(String[] args) { int[] array = { 5, 6, 4, 2, 8, 6, 3, 7 }; chooseSort(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } public static void chooseSort(int[] arr) { for (int i = 0; i < arr.length; i++) { int min = i; // 将剩余数组中的第一个数字假定为最小数 for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } // 将剩余数中的最小值与剩余数中的第一个数字交换位置 int temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } }}
二、插入排序
与选择排序一样,当前要插入的索引位置之前的数字都是有序的;不同的是 插入排序所需的时间取决于输入数字的顺序。插入排序不是交换数字的顺序,而是将插入位置后面的原元素全部向后移动。
插入排序对于部分有序的数组非常高效,适合小规模的数组比较。
最好的是顺序,时间复杂度为O(N),如果为逆序的话 这是最糟糕的情况 O(N2)。
具体流程如下:
1、首先比较数组的前两个数据,并排序;
2、比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置;
3、比较第四个元素与前三个排好序的数据,并将第四个元素放入适当的位置;
……
public class InsertSort { public static void main(String[] args) { int[] array = { 5, 2, 4, 15, 10, 6, 3, 7, 22, 16, 88 }; intsertSort(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } public static void intsertSort(int[] arr) { // 假定第一个数字的顺序是正确的 for (int i = 1; i < arr.length; i++) { //当前要插入的数字target,i为数字的位置 int target = arr[i]; int j = i; for (; j > 0 && target < arr[j - 1]; j--) { // 如果插入的数字小于它前一个数字,则将前一个数字向后移,target插入进去 arr[j] = arr[j - 1]; } //赋值 arr[j] = target; } }}
哎呀妈 这两个算法整了我好久,终于弄明白了四个算法了。真的对于一个女生来说,搞算法简直脑袋疼,因为之前这部分就比较弱,看来这个 出来混迟早都得还啊。
阅读全文
0 0
- 选择排序、插入排序 的思想(java)
- java冒泡排序、选择排序、插入排序算法的核心思想及其比较
- java数组的排序,选择排序,冒泡排序,插入排序
- 归并排序,插入排序,快速排序,冒泡排序,选择排序的思想
- Java基本排序(插入排序,冒泡排序,选择排序)
- 选择排序的思想
- 简单选择、冒泡、插入排序思想及Java实现代码
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- java常用的几种排序(冒泡排序 选择 插入排序 /快速排序)
- Java实现的简单排序(冒泡排序,选择排序和插入排序)
- java 几种简单的排序(插入排序,冒泡排序,选择排序)
- Java-数组的三大排序方法(冒泡排序,选择排序,插入排序)
- 冒泡排序,选择排序,插入排序思想分析
- 冒泡排序、选择排序、插入排序(Java实现)
- 冒泡排序、选择排序、直接插入排序(java实现)
- 冒泡排序、选择排序、插入排序(java)
- Java冒泡排序,插入排序,选择排序
- java冒泡排序,选择排序,插入排序
- iOS 10 notification extension总结
- BZOJ 4922 Karp-de-Chant Number 动态规划
- 面试之JDBC总结
- 如何评价rcnn、fast-rcnn和faster-rcnn这一系列方法
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
- 选择排序、插入排序 的思想(java)
- Centos6.X搭建Squid为YUM做代理
- linux 系统上安装或自动更新安全补丁
- 【毕业季】这篇文章让我再次转正,关于运营那些事
- mina、netty消息边界问题
- java实现Lucene索引搜索
- RTMP流媒体播放协议简单分析
- 计算机视觉caffe之路第五篇:ImageNet数据集训练及预测实例
- Java面向对象特征有那些