java 插入排序
来源:互联网 发布:职场鸡汤 知乎 编辑:程序博客网 时间:2024/06/03 04:10
插入排序
彪哥的性格就是先看代码,代码如下:
public class InsertionSort {
public static void main(String[] args) {
int [] arr = {5,2,9,7,3,1,4,6,8,0};
//排序前
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
for (out=1;out<arr.length; out++) {
int temp=arr[out];
in=out;
while(in>0 && arr[in-1]>=temp)
{
arr[in]=arr[in-1];
--in;
}
arr[in] = temp;}
//排序后
for(int i:arr){
System.out.print(i+" ");
}
}
}
5 2 9 7 3 1 4 6 8 0
0 1 2 3 4 5 6 7 8 9
在外层的for循环中,out变量从1开始,向右移动。它标记了未排序部分的最左端的数据。
在内层的while循环中,in变量从out变量开始,向左移动,直到temp变量大于in-1所指的数组数据项,或者它已经不能再往左移动为止。while循环的 每一趟都向右移动了一个已排序的数据项
详细解释:
局部有序
outer 是被标记的队员,outer左边的所有队员已经是局部有序的了。这意味着这一部分人之间是按顺序排列的,每个人比他/她左边的人都高。然而这些队员在队列中最终的位置还没有确定,因为当没有被排过序的队员要插入到他们中间的时候,他们的位置还要发生变动。outer本身和他右边所有的队员都是未排过序的。
下面将要做的是在(局部)有序组中的适当位置插入被标记的队员outer。然而要做到这一点,需要把部分已排序的队员右移以腾出空间。为了提供移动所需的空间,就先让被标记的队员outer出列。(在程序中,这个数据项被存储在一个临时变量temp中。)现在移动已经排过序的队员来腾出空间。将局部有序中最高的队员移动到原来被标记队员所在位置,次高的队员移动到原来最高的队员所在的位置,依此类推。这个移动过程什么时候结束昵?假设你和被标记的队员一起向队列的左端移动。在每个位置上,队员都向右移动一位,同时被标记的队员和下一个要移动的队员比较身高。当把最后一个比被标记的队员还高的队员移位之后,这个移动的过程就停止了。最后一次移位空出的位置,就是被标记队员应该插入的位置。
插入排序的效率
对于已经有序或基本有序的数据来说,插入排序要好得多。
- Java排序--插入排序
- 排序-插入排序-Java
- 插入排序--直接插入排序[Java实现]
- 插入排序--折半插入排序[Java实现]
- java插入排序之直接插入排序
- 【插入排序】直接插入排序--Java
- 【插入排序】二分插入排序--Java
- 插入排序----直接插入排序----java实现
- [java]插入排序及折半插入排序
- java插入排序--直接插入排序
- Java插入排序
- java插入排序算法
- JAVA 插入排序
- JAVA插入排序分析
- java实现插入排序
- 插入排序java
- java 插入排序
- 插入排序(java)
- 【leetcode】393. UTF-8 Validation【M】
- 数据结构之KMP算法解析
- 《java多线程编程核心技术》读书笔记2.2:volatile关键词
- tomcat学习笔记
- 汇编语言(b)--存储器
- java 插入排序
- 效率
- Android-day03-RadioButton
- Spark学习(一)--RDD操作
- 009-取有效地址指令LEA
- 老生常谈javascript的5中继承
- MATLAB入门教程
- <s:iterator>遍历数组
- Mac10.11安装Python2.7+Theano0.8+CUDA7.5