一、基本理解
插入排序(nsertion Sort),一般也被称为直接插入排序,是一种简单直观的排序算法。
**工作原理:**将待排列元素划分为「已排序」和「未排序」两部分,每次从「未排序的」元素中选
择一个插入到「已排序的」元素中的正确位置。
二、题目练习
1619. 删除某些元素后的数组均值
void insertSort(int * n, int size) {int i, j;for(i = 1; i < size; ++i) {int temp = n[i];for(j = i - 1; j >= 0; --j) {if(temp < n[j]) {n[j + 1] = n[j];}else {break;}}n[j + 1] = temp;}
}double trimMean(int* arr, int arrSize) {insertSort(arr, arrSize);int cnt = arrSize / 20;double ans = 0;for(int i = cnt; i < arrSize - cnt; ++i) {ans += arr[i];}return ans / (arrSize - 2*cnt);
}
1491. 去掉最低工资和最高工资后的工资平均值
// 选择排序
void insertSort(int * a, int n) {// 正序出发for(int i = 1; i < n; ++i) {int temp = a[i];int j = i - 1;while(j >= 0 && temp < a[j]) {a[j + 1] = a[j];j--;}a[j + 1] = temp;}
}double average(int* salary, int salarySize) {insertSort(salary, salarySize);double ans = 0;for(int i = 1; i < salarySize - 1; ++i) {ans += salary[i];}return ans / (salarySize - 2);
}
1984. 学生分数的最小差值
void insertSort(int * a, int n) {int i, j;for(i = 1; i < n; ++i) {int temp = a[i];for(j = i - 1; j >= 0; --j) {if(temp < a[j]) {a[j + 1] = a[j];} else {break;}}a[j + 1] = temp;}
}int minimumDifference(int* nums, int numsSize, int k) {insertSort(nums, numsSize);int ret = 100001;for(int i = 0; i + k - 1 < numsSize; ++i) {int cha = nums[i + k - 1] - nums[i];if(ret > cha) {ret = cha;}}return ret;
}