您的位置:首页 > 理论基础 > 数据结构算法

[Java数据结构]简单排序之插入排序

2017-11-30 19:54 387 查看
》》图例思路

》标记第一个数



》遍历从第二个数开始,44这个数的位置就已经空了



》44作为a[in],比较a[in]和a[in-1],这里44比3大,插入空位



》外循环+1,依旧是当前标记数和自己的前一个数比较



》38比44小



》交换位置



》插入



》》代码思路:

在外层for循环中,out变量从1开始向右移动,内存in则从out变量开始向左移动,temp作为标记数也是从out开始,直到temp变量小于in所指的数据项,或者in<0,内循环结束。内循环每一趟都向右移动一个已经排序的数据项。

》》代码

package 简单排序;

/*
* 第一次最多比较一次,第二次最多比较两次....
* 此算法比冒泡快一倍,比选择略快
* 如果无序 O(N^2)
* 如果有序或基本有序O(N)
*
* */

class InsertArr {

private long a[];
private int n;// 数组的个数

public InsertArr(int max) {
a = new long[max];
n = 0;
}

public void insert(int i) {
a
= i;
n++;

}

public void display() {
for (int i = 0; i < n; i++) {

System.out.print(a[i] + " ");

}
System.out.println("");
}

public void selectSort() {

int out, in;
long temp;
for (out = 1; out < n; out++) {//从第二个数开始往后遍历,因为要和前一个比较
temp = a[out];//临时数=[out]
in = out;//内循环也是从第二个数开始
while (in > 0 && a[in - 1] >= temp) {//in会递减,把in的前一个数和临时数做比较
a[in] = a[in - 1];//把前一个数填进当前这个数的坑里,就当a[in-1]已经空了
in--;
}
a[in] = temp;//临时数插入

}

}

}

public class Insert {

public static void main(String[] args) {
InsertArr arr = new InsertArr(100);
arr.insert(20);
arr.insert(3);
arr.insert(6);
arr.insert(78);
arr.display();
arr.selectSort();
arr.display();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐