直接插入排序的思路及实现解析
直接插入排序的思想是去第一个元素,该元素被看作已经排序,再取下一个元素,在已经排序的元素中从中间往前比较,重复上面步骤直到无下一个元素。有点像斗地主的抓牌过程,每次抓的新牌都是在已经排好序的元素中比较。
直接插入排序实现:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
代码实现:
/**
* 直接插入排序
*/
public class charu {
public static void main(String[] args) {
int[] array = {45, 43, 98, 23, 21, 28, 56, 24, 58};
//外层循环控制选取比较的元素
for (int i = 0; i < array.length - 1; i++) {
//循环已经排序的元素
for (int j = i + 1; j > 0; j--) {
//进行比较交换元素
if (array[j] < array[j - 1]) {
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
System.out.println(Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
}
}
运行结果:
[43, 45, 98, 23, 21, 28, 56, 24, 58]
[43, 45, 98, 23, 21, 28, 56, 24, 58]
[23, 43, 45, 98, 21, 28, 56, 24, 58]
[21, 23, 43, 45, 98, 28, 56, 24, 58]
[21, 23, 28, 43, 45, 98, 56, 24, 58]
[21, 23, 28, 43, 45, 56, 98, 24, 58]
[21, 23, 24, 28, 43, 45, 56, 98, 58]
[21, 23, 24, 28, 43, 45, 56, 58, 98]
[21, 23, 24, 28, 43, 45, 56, 58, 98]