插入排序的思路是这样的:
像整理扑克牌那样,一张张来,将每一张插入到已经有序的牌中,这样会导致每个排在这张牌右边的元素都向右移动一个位置。
对于大数组,且其中部分元素已经有序进行排序,比随机顺序的数组要快得多。
代码如下:
public void InsertSort(int[] a)
{
//升序排列
for(int i = 1;
i < a.Length;
i++)
{
//将a[i]插入到a[i-1], a[i-2], a[i-3]...之中
for(int j = i;
j > 0 && a[j] < a[j-1];
j++)
{
exchange(a[j], a[j-1]);
}
}
}
【LeetCode基础-排序-插入排序】对于0到Length中的每个i,将 a[i] 与 0 到 a[i-1] 中比它小的所有元素依次交换。i 从左向右的过程,左边始终有序,则 i 到达最右端时排序就完成了。
要大幅提高插入排序的速度,需要在内循环中将较大的元素都向右移动,而不是总交换两个元素(访问数组的次数就能减半)。
文章图片
推荐阅读
- 数据结构与算法|【算法】力扣第 266场周赛
- leetcode|今天开始记录自己的力扣之路
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
- LeetCode-35-搜索插入位置-C语言
- leetcode python28.实现strStr()35. 搜索插入位置
- Leetcode Permutation I & II
- python|leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
- LeetCode 28 Implement strStr() (C,C++,Java,Python)
- Python|Python Leetcode(665.非递减数列)