七大排序算法详细理论及其代码实现
1、插入排序
直接插入排序
直接插入排序特性:
时间复杂度平均为O(n^2),最坏为O(n^2),最好为O(n),空间复杂度为O(1),排序算法稳定。
直接插入排序实现思路
(1)、在长度为N的数组,将数组中第i [1~N-1]个元素,插入到数组 [0~i] 适当的位置上。
(2)、在排序的过程中当前元素之前的数组元素已经是有序的了。
(3)、在插入的过程中,有序的数组元素,需要向右移动为更小的元素腾出空间,直到为当前元素找到合适的位置。
插入排序代码实现片断
1
class Solution {
public int[] sortArray(int[] nums) {
int[] arr = new int[nums.length];
// 拷贝数组
System.arraycopy(nums,0,arr,0,nums.length);
insertSort(arr);
return arr;
}
private void insertSort(int[] arr){
for(int i = 0; i <arr.length; ++i){
// 找到上一个已排序元素
int cur = arr[i], j = i-1;
// 进行比较并交换
while(j >=0 && arr[j] > cur){
arr[j+1] = arr[j];
--j;
}
// 将未排序元素插入到合适位置
arr[j+1] = cur;
}
}
}
方法二
import java.util.Arrays;
/**
* 描述:直接插入排序
*/
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{2,1,7,5,87,45,98,23,45};
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int tem = arr[i];
int j;
for (j = i - 1; j >= 0; j--) {
if (tem < arr[j]) {
arr[j + 1] = arr[j];
}else {
break;
}
}
arr[j+1] = tem;
}
}
}
2、例题
本片段来自牛客网大佬,侵删!!! ↩︎