天津快速建站模板,唐山海港开发区人才网,杭州网站建设网站,短网址生成源码引言
玩纸牌 的时候。往往 需要将牌从乱序排列变成有序排列 这就是插入排序
插入排序算法思想
先看图 首先第一个元素 我默认已有序 那我们从第二个元素开始#xff0c;依次插入到前面已有序的部分中。具体来说#xff0c;我们将第二个元素与第一个元素比较#xff0c;…引言
玩纸牌 的时候。往往 需要将牌从乱序排列变成有序排列 这就是插入排序
插入排序算法思想
先看图 首先第一个元素 我默认已有序 那我们从第二个元素开始依次插入到前面已有序的部分中。具体来说我们将第二个元素与第一个元素比较如果第二个元素比第一个元素小则交换它们的位置。然后再将第三个元素插入到前两个元素已经排序好的部分中以此类推直到将最后一个元素插入到整个序列中。这个过程可以 从数组的第二个元素开始遍历假设当前元素是已排序的序列中的一个正确位置记为value。 往前遍历已排序的序列如果当前元素大于value则将当前元素移至下一位置。这个过程就像在已排序的序列中寻找value的正确位置。 当找到value的正确位置后将value插入这个位置。 重复以上步骤直到数组全部有序。
插入排序算法专区
// 定义一个名为InsertSort的函数它接受三个参数一个整数数组arr表示要排序的数组一个整数size表示数组的大小以及一个指向布尔函数的指针Comp。这个布尔函数用于比较两个整数。
void InsertSort(int arr[], int size, bool (*Comp)(const int, const int)) {// 检查是否提供了比较函数。如果没有提供即Comp指针为nullptr那么直接返回不进行排序。 if (Comp nullptr) {return;}// 从数组的第二个元素开始遍历i表示当前处理元素的索引 for (int i 1; i size; i) {// 将当前索引i的元素保存到变量value中此元素待插入到已排序的部分 int value arr[i];// j表示已排序部分的最后一个元素的索引它从i-1开始向左移动寻找插入位置 int j i - 1;// 当j大于等于0并且Comp函数返回真即arr[j]大于value时继续向左移动j同时将arr[j]元素向右移动一位 while (j 0 Comp(arr[j], value)) {arr[j 1] arr[j];j--;}// 找到了插入位置将value插入到j1的位置上 arr[j 1] value;}
}// 定义一个名为GreaterCmp的函数它接受两个const int类型的参数val1和val2返回值为bool类型。当val1大于val2时返回true否则返回false。
bool GreaterCmp(const int val1, const int val2) {return val1 val2;
}// 定义一个名为LessCmp的函数它接受两个const int类型的参数val1和val2返回值为bool类型。当val1小于val2时返回true否则返回false。
bool LessCmp(const int val1, const int val2) {return val1 val2;
}