1 插入排序法思想
插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
2 插入排序法的代码实现
2.1 java
package sort;
import java.util.Arrays;
/**
* @author Andy
* @email andy.gsq@qq.com
* @date 2023/2/16 12:07:14
* @desc 插入排序
*/
public class InsertSortForJava {
public static void main(String[] args) {
int sum = 8;
int[] arr = new int[sum];
for (int i = 0; i < sum; i++) {
arr[i] = (int) (Math.random() * sum); //生成一个[0, sum) 数
}
System.out.println("排序前:");
show(arr);
insertSort(arr);
System.out.println("排序后:");
show(arr);
}
public static void insertSort(int[] arr) {
int insertVal = 0;
int insertIndex = 0;
for (int i = 1; i < arr.length; i++) {
insertVal = arr[i];//待插数值
insertIndex = i - 1;//需要插入的位置
// 给 insertVal 找到插入的位置
// 说明
// 1. insertIndex >= 0 保证在给 insertVal 找插入位置,不越界
// 2. insertVal < arr[insertIndex] 待插入的数,还没有找到插入位置
// 3. 就需要将 arr[insertIndex] 后移
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
if (insertIndex + 1 != i) {
arr[insertIndex + 1] = insertVal;
}
}
}
public static void show(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
2.2 scala
package sort
/**
*
* @author Andy
* @email andy.gsq@qq.com
* @date 2023/2/16 12:28:46
* @desc TODO
*
*/
object InsertSortForScala {
def main(args: Array[String]): Unit = {
val sum = 8
val arr = Array.ofDim[Int](sum)
for (i <- 0 until arr.length) {
arr(i) = (math.random() * sum).toInt
}
println("排序前:")
show(arr)
insertSort(arr)
println("排序后:")
show(arr)
}
def insertSort(arr: Array[Int]): Unit = {
var insertVal = 0
var inserIndex = 0
for (i <- 1 until arr.length) {
insertVal = arr(i)
inserIndex = i - 1
while (inserIndex >= 0 && insertVal < arr(inserIndex)) {
arr(inserIndex + 1) = arr(inserIndex)
inserIndex -= 1
}
if (inserIndex + 1 != i) {
arr(inserIndex + 1) = insertVal
}
}
}
def show(arr: Array[Int]): Unit = {
for (i <- arr) {
print(i + " ")
}
println()
}
}