原理
1.定义一个指针,将指针指向某个元素(一般指向第二个),然后把以这个元素为基准,将整个数组分成两个部分,左侧视为新数组,右侧视为原数组
2.将此元素抽取出来,然后按照从右向左的顺序分别与其左边的元素比较,遇到比此元素大的就把这个大的元素向右移,直到遇到比它小的元素或者它左边元素都比它大停止
3.此时会出现一个空位,将此元素插入到这个位置,此时新数组中它左侧元素都比它小,右侧都比它大
4.将指针右移一位,重复上述过程,每循环一轮,新数组就多一个,原数组就少一个,最后只剩下有序的新数组
举例分析
对我来说图形分析比文字分析更容易理解,我在YouTube上看到一个不错的视频,搬运了一下,大家可以观看一下https://www.bilibili.com/video/av35233196/
源码实现
for(int i=1;i<arr.length;i++){
int temp = arr[i];
int leftIndex = i - 1;
while(leftIndex >= 0 && arr[leftIndex] > temp){
arr[leftIndex+1] = arr[leftIndex];
leftIndex--;
}
arr[leftIndex+1] = temp;
}
网友评论