[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();
}
}
》标记第一个数
》遍历从第二个数开始,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();
}
}
相关文章推荐
- 数据结构--排序系列(插入排序,希尔排序,堆排序)Java代码实现
- [Java数据结构]简单排序之冒泡排序
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- 数据结构(JAVA)---二叉树的简单实现及排序
- Java中的简单排序:冒泡排序,选择排序,插入排序
- [Java数据结构]简单排序之选择排序
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- java 几种简单的排序(插入排序,冒泡排序,选择排序)
- Java数据结构之插入排序与选择排序的图示对比
- java简单排序-插入排序
- Java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序
- 算法和数据结构-选择排序、插入排序及希尔排序 java实现
- 算法和数据结构-排序-插入排序(Java)
- java数据结构之插入排序(选择排序(直接选择排序、堆排序))
- 数据结构排序——插入排序(JAVA)
- java简单排序:选择排序,冒泡排序,插入排序
- 最简单之Java实现冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序(转载请注明出处)
- 三种简单排序用java实现(选择排序,冒泡排序,插入排序)
- Java实现简单数据结构之二叉树结构排序 binary tree
- 每天一个数据结构——三种简单排序算法及Java实现