编写Java代码实现直接插入排序 ?
参考答案:
直接插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
以下是一个Java实现的直接插入排序算法:
public class InsertionSort {
public static void main(String[] args) {
int[] arr = {4, 3, 2, 10, 12, 1, 5, 6};
insertionSort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
}
这段代码首先定义了一个整数数组arr
,然后使用insertionSort
函数对其进行排序。在insertionSort
函数中,对于数组中的每个元素,我们都将其视为"key",并将其与前面的元素进行比较。如果前面的元素大于key,我们就将其向后移动一位,然后继续比较下一个元素,直到找到key的正确位置并将其插入。
注意,这个算法的时间复杂度在最坏和平均情况下都是O(n^2),其中n是数组的长度。尽管它的效率不如一些更高级的排序算法(如快速排序、归并排序等),但它对于小数组或者部分有序的数组来说是一个很好的选择,因为它的实现简单且易于理解。