直接插入排序代码解释
时间: 2023-11-28 13:41:47 浏览: 78
直接插入排序代码
直接插入排序是一种简单的排序算法,其思想是将待排序的数字逐个插入到已经排好的有序序列里,最后得到一个新的有序序列。下面是直接插入排序的代码实现及解释:
void insertsort(int* a, int n) {
//多趟数排序,最后为一个有序序列
for (int i = 0; i < n - 1; i++) {
//单趟排序 [0,end]有序,把值end+1的值插入后,依然有序
int end=i;
int tmp = a[end + 1];
while (end >= 0) {
if (tmp < a[end]) {
a[end + 1] = a[end];
end--;
} else break;
}
a[end + 1] = tmp;
}
}
该函数接受两个参数,一个是待排序的数组a,另一个是数组的长度n。该函数使用了两层循环,外层循环控制多趟排序,内层循环控制单趟排序。在单趟排序中,我们将数组分为两部分,[0,end]为已经排好序的部分,[end+1,n-1]为待排序的部分。我们将待排序的第一个元素tmp插入到已经排好序的部分中,使得[0,end+1]仍然有序。具体实现是,从end开始向前遍历已经排好序的部分,如果a[end]比tmp大,则将a[end]后移一位,继续向前遍历;否则,跳出循环,将tmp插入到a[end+1]的位置。最后,外层循环结束后,数组a就是一个有序序列。
阅读全文