插入排序,感觉没有什么好说的,主要优点是它的比较次数比较少,在数据量较小的时候它的性能优于快排,所以在问如何优化快排的时候,可以说当子序列的数据量分到较小的时候可以使用插入排序。
package suanfa;
import java.util.Arrays;
import java.util.Scanner;import java.util.concurrent.CountDownLatch;
public class Main {
public static void main (String[] args) {
int[] arr = {4,2,3,5,3};
int[] arr1 = {1,2,3,4,5};
insertionSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void insertionSort(int[] arr) {
if(arr == null || arr.length <2) {
return;
}
for(int i=1;i < arr.length;i++) {
for( int j= i-1; j>=0; j--) {
if(arr[j] > arr[j+1])
swap(arr, j, j+1);
else {
break;//当前的数小于了后面的数,说明这部分已经有序,就不需要再前进进行比较了从而减少了比较次数
}
}
}
}
public static void swap(int[] arr, int i,int j) {
arr[i] = arr[i]^arr[j];
arr[j] = arr[i]^arr[j];
arr[i] = arr[i]^arr[j];
}
}