Java中的插入排序
时间:2020-02-23 14:36:16 来源:igfitidea点击:
今天,我们将研究插入排序Java程序。
插入排序与Bubble排序类似,在本文中,我们将通过插入排序算法(示例),然后编写插入排序Java代码对整数数组进行排序。
Java中的插入排序
在Java插入排序中,我们将比较所有先前元素中任何索引处的值,直到找到所有较小的值。
然后,将值放在没有较小值的索引处。
以上两个步骤以迭代方式完成到最后一个索引,最后我们得到了一个排序的整数数组。
插入排序算法示例
让我们通过一个示例来了解插入排序算法。
假设我们有一个未排序的数组[5,4,14,2,2,8]
。
- 第一个索引迭代:第一个索引的值= 4,小于5,所以数组变为[5,5,14,2,2,8],当我们到达起点时,将值放在第0个索引处,数组变为[4, 5,14,2,8]
- 第二索引迭代:第二索引= 14处的值大于5,因此将数组保留原样。
现在数组= [4、5、14、2、8] - 第三索引迭代:第三索引= 2处的值小于14,因此数组变为[4、5、14、14、8],再次2小于5,因此数组变为[4、5、5、14, 8]。
同样2小于4,因此数组变为[4、4、5、14、8]。
当我们到达数组的开头时,我们将2放在第0个索引处,并且数组变为[2,4,5,14,8] - 第4个索引迭代:第4个索引处的值= 8,因此数组变为[2,4,5,5,14,14],然后8大于5,因此将8放在第14位,数组变为[2,4,5, 8、14]。
现在,我们的数组已排序。
Java插入排序
在Java程序中编写插入排序实现时要记住的要点:
从第二个元素开始到数组的最后一个元素,因此使用for循环。
将值存储到另一个变量中,以避免在我们之间更改索引值时丢失它。
我们需要不断更改值,直到我们在第0个索引处,或者发现先前值更大为止,因此我们可以为此使用while循环。
这是基于上述示例和关键点的Java中插入排序的实现。
package com.theitroad.test; import java.util.Arrays; public class InsertionSort { public static void main(String[] args) { int A[] = new int[10]; populateArray(A); System.out.println("Before Sorting: "); printArray(A); //sort the array insertionSort(A); System.out.println("\nAfter Sorting: "); printArray(A); } /** * This method will sort the integer array using insertion sort in java algorithm * * @param arr */ private static void insertionSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int valueToSort = arr[i]; int j = i; while (j > 0 && arr[j - 1] > valueToSort) { arr[j] = arr[j - 1]; j--; } arr[j] = valueToSort; } } public static void printArray(int[] B) { System.out.println(Arrays.toString(B)); } public static void populateArray(int[] B) { for (int i = 0; i < B.length; i++) { B[i] = (int) (Math.random() * 100); } } }
我正在使用随机数生成器代码,上述程序的输出为:
Before Sorting: [57, 90, 80, 48, 35, 91, 1, 83, 32, 53] After Sorting: [1, 32, 35, 48, 53, 57, 80, 83, 90, 91]
插入排序复杂度
对于最佳情况(已排序的数组),插入排序的复杂度为O(n),对于最坏情况(以相反顺序排序),插入复杂度为O(n2)。
Java中的插入排序是小尺寸数组的很好选择,并且当您知道大多数值将被排序时。
例如,对大小为100的数组进行排序时,您知道所有值都将在1到10之间。
这全部用于java中的插入排序。