您的位置:首页 > 职场人生

程序员必须掌握的8大排序算法(一):直接插入排序

2017-08-27 13:17 302 查看
分类:

1)插入排序(直接插入排序、希尔排序)

2)交换排序(冒泡排序、快速排序)

3)选择排序(直接选择排序、堆排序)

4)归并排序

5)分配排序(基数排序)



一、直接插入排序

(一)基本思想

在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。



(二)代码实现(Java)

import java.util.Arrays;

public class Sort {

public static void insertSort(int[] array) {
int i, j, temp;
for (i = 1; i < array.length; i++) {
temp = array[i];
j = i;

// 将大于temp的值整体后移一个单位
while(j > 0 && array[j-1] > temp)
{
array[j] = array[j-1];
j--;
}
array[j]=temp;
}

}

public static void main(String[] args) {
int[] arr = {57, 68, 59, 52};
System.out.println("Original array: " + Arrays.toString(arr));
insertSort(arr);
System.out.println("Sorted array: " + Arrays.toString(arr));
}
}


运行结果:

Original array: [57, 68, 59, 52]

Sorted array: [52, 57, 59, 68]

程序分析:

(1) i = 1, temp = a[1] = 68, j = 1, array[0] = 57, array[0] > temp不成立,不需要调整

(2)i = 2,temp = a[2] = 59,

① j = 2,array[1] = 68 > temp,执行循环array[2] = array[1] = 68,j自减。

② j = 1, array[0] = 57 > temp不成立,循环结束。

③ 最后执行array[1] = temp = 59,此时arr = {57,59,68,52}

(3)i = 3,temp = a[3] = 52

① j = 3, array[2] = 68 > temp,执行循环array[3] = array[2] = 68,j自减

② j = 2,array[1] = 59 > temp,执行循环array[2] = array[1] = 59,j自减

③ j = 1,array[0] = 57 > temo,执行循环array[1] = array[0] = 57,j自减后变为0,循环结束

④ 最后执行array[0] = temp = 52,此时array = {52, 57, 59, 68}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: