【Java】数据结构-插入排序法

插入排序法

  • 从[0,i)每一位跟自己i-1进行比较大小,如果小,就交换到前面,如果大就不变。

插入排序法执行截图

image-20210624185045631

插入排序法代码(完整)

InsertionSort.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class InsertionSort {

private InsertionSort(){} //私有类

public static <E extends Comparable<E>> void sort(E[] arr){

for(int i = 0 ; i < arr.length ; i++){
// 将arr[i]插入到合适的位置
// for(int j = i ; j > 0; j--) //不断和前面的值比较,小就交换,大就结束
// if(arr[j].compareTo(arr[j-1])<0)
// swap(arr, j , j-1);
// else break;
for(int j = i; j > 0 && arr[j].compareTo(arr[j-1])<0; j-- )
swap(arr,j,j-1);
}
}

private static <E> void swap(E[] arr, int i , int j){

E t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
public static void main(String[] args) {

int[] dataSize = {10000, 100000};
for (int n : dataSize) {
Integer[] arr = ArrayGenerator.generateRandomArray(n, n);
SortingHelper.sortTest("InsertionSort", arr);

}
}
}

SortingHelper.java(延续了前面的选择排序法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class SortingHelper {

private SortingHelper(){}

public static <E extends Comparable<E>> boolean isSorted(E[] arr){

for(int i = 1; i< arr.length; i++)
if (arr[i - 1].compareTo(arr[i]) > 0)
return false;
return true;
}

public static <E extends Comparable<E>> void sortTest(String sortname, E[] arr){
long startTime = System.nanoTime();
if(sortname.equals("SelectionSort"))
SelectionSort.sort(arr);
else if(sortname.equals("InsertionSort"))
InsertionSort.sort(arr);
long endTime = System.nanoTime();
for(E e:arr){
System.out.println(e);
}


double time = (endTime - startTime) / 1000000000.0; //纳米要/9个零

if(!SortingHelper.isSorted(arr))
throw new RuntimeException(sortname + "failed");
System.out.println(String.format("%s , n = %d : %f s ", sortname, arr.length, time));
}
}

本文标题:【Java】数据结构-插入排序法

文章作者:孤桜懶契

发布时间:2021年06月24日 - 15:53:37

最后更新:2022年05月20日 - 11:47:45

原始链接:https://gylq.gitee.io/posts/36.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------