8种排序算法--直接插入排序
2013-08-23 17:35
232 查看
直接插入排序。
我的想法是:首先将序列想成是有序的,然后依次往后追加数让他成为大数列。如果追加的数使该序列无序,就将这个数进行插入到前面有序的序列中。直到全部追加完毕就排序完毕了。
现在有这么一个序列:
6 7 4 3 9 1 2 3
第1次:比较是从第二开始的,如果前面的数比后面的数大就将两个数重新排,结果没有。
第2次:
4 6 7 3 9 1 2 3 而4比前面的数小,说明第三位开始乱了,所以4要和7比较。如果比他小就往前排,接着和6比,如果比6小就继续往前排 这样前面3个数就有序了。
第3次:
3 4 6 7 9 1 2 3 依次这么搞
第4次: 搞完以后发现3,4,,6,7,9有序就往后比较
第5次:
1 3 4 6 7 9 2 3
第6次:
1 2 3 4 6 7 9 3
第7次:
1 2 3 3 4 6 7 9
下面请看实现代码:
packagecom.fish.sort;
public
class InsertSort {
public
static void main(String[] args) {
// 将九个数进行排序
int[] array = { 6, 7, 4, 3, 9, 1, 2, 3 };
myResult(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] +
" ");
}
}
public
static void myResult(int[] array) {
for (int i = 1; i < array.length; i++) {
int session = array[i];//
先将这个数放入缓存
if (array[i] < array[i - 1]) {
// 如果这个数比前面的数小说明这个数开始乱了。所以我们要重新排序
int j = i - 1;
while (j >= 0 && array[j] > session){//
那就将这个数和他前面的各个数比较
array[j + 1] = array[j];
// 因为比完一个要有一个位置,所以先依次往后移然后将这个数插入到适合自己的位置上
j--;
}
array[j + 1] = session;
}
}
}
}
插入排序其实代码量比较少,思维比较多。想通了很简单。
插入排序:如果本身数据多半有序实现就非常快。如果全部无序就比较坑爹。
这种算法时间复杂度:n^2 空间复杂度 1 是稳定性排序。
我的想法是:首先将序列想成是有序的,然后依次往后追加数让他成为大数列。如果追加的数使该序列无序,就将这个数进行插入到前面有序的序列中。直到全部追加完毕就排序完毕了。
现在有这么一个序列:
6 7 4 3 9 1 2 3
第1次:比较是从第二开始的,如果前面的数比后面的数大就将两个数重新排,结果没有。
第2次:
4 6 7 3 9 1 2 3 而4比前面的数小,说明第三位开始乱了,所以4要和7比较。如果比他小就往前排,接着和6比,如果比6小就继续往前排 这样前面3个数就有序了。
第3次:
3 4 6 7 9 1 2 3 依次这么搞
第4次: 搞完以后发现3,4,,6,7,9有序就往后比较
第5次:
1 3 4 6 7 9 2 3
第6次:
1 2 3 4 6 7 9 3
第7次:
1 2 3 3 4 6 7 9
下面请看实现代码:
packagecom.fish.sort;
public
class InsertSort {
public
static void main(String[] args) {
// 将九个数进行排序
int[] array = { 6, 7, 4, 3, 9, 1, 2, 3 };
myResult(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] +
" ");
}
}
public
static void myResult(int[] array) {
for (int i = 1; i < array.length; i++) {
int session = array[i];//
先将这个数放入缓存
if (array[i] < array[i - 1]) {
// 如果这个数比前面的数小说明这个数开始乱了。所以我们要重新排序
int j = i - 1;
while (j >= 0 && array[j] > session){//
那就将这个数和他前面的各个数比较
array[j + 1] = array[j];
// 因为比完一个要有一个位置,所以先依次往后移然后将这个数插入到适合自己的位置上
j--;
}
array[j + 1] = session;
}
}
}
}
插入排序其实代码量比较少,思维比较多。想通了很简单。
插入排序:如果本身数据多半有序实现就非常快。如果全部无序就比较坑爹。
这种算法时间复杂度:n^2 空间复杂度 1 是稳定性排序。
相关文章推荐
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 8种排序算法--直接插入排序
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 8种排序算法--直接插入排序
- 排序算法--直接插入排序
- java排序算法之直接插入排序
- 排序算法---直接插入排序和希尔排序
- 排序算法之直接插入排序
- 排序算法Java实现(直接插入排序)
- 排序算法之直接插入排序
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- PHP实现排序算法----直接插入排序(Straight Insertion Sort)
- 排序算法(一)---- 直接插入排序
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 排序算法(一)直接插入排序和希尔排序
- 常见的五类排序算法图解和实现(插入类:直接插入排序,折半插入排序,希尔排序)
- 排序算法一:直接插入排序
- 排序算法(三) —— 直接插入排序
- java基本排序算法之直接插入排序