直接插入排序学习
2017-04-19 16:00
225 查看
直接插入排序:
1、从未排序的第一个元素开始,和前一个已排好序的元素相比较,如果小于前一个元素就交换位置,并继续与前一个元素比较,大于则跳出当前这一层的循环,这样当前元素与原来已排好序的元素,组成一个新的已经排好序的序列;(原数组包含(0~i)已排好序的序列与(i~lenght-1)未排好序的序列),(第一个元素可以看成是已排好序的序列,从第二个元素起算第一个未排好序的序列首元素);
2、循环重复上述操作,直到数组全都排好序;
代码如下:
public class InsertionSort {
private static int num = 0;//循环次数
public int[] sort(int[] forSort){
for(int i=1; i<forSort.length; i++){
for(int j=i;j>0;j--){
num++;
if(forSort[j]<forSort[j-1]){
int temp = forSort[j-1];
forSort[j-1] = forSort[j];
forSort[j] = temp;
}else{
break;
}
}
System.out.println("分次结果:"+Arrays.toString(forSort)+",num="+num);
}
return forSort;
}
public static void main(String[] args) {
int[] array = {2,5,6,8,5,4,6,9,4,9};
InsertionSort insertSort = new InsertionSort();
array = insertSort.sort(array);
System.out.println("最终结果:"+Arrays.toString(array)+",num="+num);
}
}
执行结果如下:
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=1
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=2
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=3
分次结果:[2, 5, 5, 6, 8, 4, 6, 9, 4, 9],num=6
分次结果:[2, 4, 5, 5, 6, 8, 6, 9, 4, 9],num=11
分次结果:[2, 4, 5, 5, 6, 6, 8, 9, 4, 9],num=13
分次结果:[2, 4, 5, 5, 6, 6, 8, 9, 4, 9],num=14
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=21
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=22
最终结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=22
1、从未排序的第一个元素开始,和前一个已排好序的元素相比较,如果小于前一个元素就交换位置,并继续与前一个元素比较,大于则跳出当前这一层的循环,这样当前元素与原来已排好序的元素,组成一个新的已经排好序的序列;(原数组包含(0~i)已排好序的序列与(i~lenght-1)未排好序的序列),(第一个元素可以看成是已排好序的序列,从第二个元素起算第一个未排好序的序列首元素);
2、循环重复上述操作,直到数组全都排好序;
代码如下:
public class InsertionSort {
private static int num = 0;//循环次数
public int[] sort(int[] forSort){
for(int i=1; i<forSort.length; i++){
for(int j=i;j>0;j--){
num++;
if(forSort[j]<forSort[j-1]){
int temp = forSort[j-1];
forSort[j-1] = forSort[j];
forSort[j] = temp;
}else{
break;
}
}
System.out.println("分次结果:"+Arrays.toString(forSort)+",num="+num);
}
return forSort;
}
public static void main(String[] args) {
int[] array = {2,5,6,8,5,4,6,9,4,9};
InsertionSort insertSort = new InsertionSort();
array = insertSort.sort(array);
System.out.println("最终结果:"+Arrays.toString(array)+",num="+num);
}
}
执行结果如下:
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=1
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=2
分次结果:[2, 5, 6, 8, 5, 4, 6, 9, 4, 9],num=3
分次结果:[2, 5, 5, 6, 8, 4, 6, 9, 4, 9],num=6
分次结果:[2, 4, 5, 5, 6, 8, 6, 9, 4, 9],num=11
分次结果:[2, 4, 5, 5, 6, 6, 8, 9, 4, 9],num=13
分次结果:[2, 4, 5, 5, 6, 6, 8, 9, 4, 9],num=14
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=21
分次结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=22
最终结果:[2, 4, 4, 5, 5, 6, 6, 8, 9, 9],num=22
相关文章推荐
- 直接插入排序--学习(三)
- 和小强一起学习数据结构java版之直接插入排序
- 学习算法手记【原】- 直接插入排序
- 学习回顾算法(直接插入排序)
- 菜鸟学习历程【15-1】直接插入排序
- 数据结构学习10——直接插入排序与希尔排序
- 排序算法学习-直接插入排序
- 经典算法学习——直接插入排序
- 新手学习数据结构与算法---直接插入排序
- 数据结构与算法学习之路:直接插入排序
- 学习笔记-直接插入排序 15/01/05
- Java学习-插入排序1-直接插入排序
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 小蚂蚁学习数据结构(35)——直接插入排序
- 数据结构学习之直接插入排序
- java学习之直接插入排序
- [算法学习笔记]直接插入排序笔记
- c++学习之--排序2-直接插入排序
- 六种排序方法的学习(直接插入、希尔、冒泡、快速、选择、归并)