插入排序
插入排序(Insertion Sort)
插入排序的过程是
-
首先假设队列左边的元素是已经排序过的元素
-
依次遍历已排序过的元素右边的元素,将该元素与左边已排序的元素做比较,这样左侧已排序的元素个数就会依次增加
-
重复第二步,直到所有的元素全部排序完成
简单来说,插入排序很像是打扑克的理牌过程。我们手里的牌是已经排序过的,每次新抓一张牌,就将牌插入到手里已排序的牌中的合适位置,保证手里的牌一直是排序过的。
- 最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定
# C #include<stdio.h> insertsort(int *k,int n) /*直接插入排序*/ { int i,j; int temp; for(i=1;i<n;i++) { temp = k[i]; //将要比较的值先绶存起来留出一个空位,方便移动 j = i - 1; while(j>=0 && k[j]>temp) //比较直到出现比temp大的值,或向前找到头 { k[j+1] = k[j]; //将前面的值往后移 j--; } k[j+1] = temp; //插在a[j]的后面 } }
# Python while语句 13行代码 def insert_sort(data): length = len(data) i = 1 # 从位置1开始向右遍历,因为我们假设位置0上的元素是已经排序好了的 while i < length: j = i # j代表当前已排序的数字的结束位置 while j > 0: # j < 0时证明已经遍历完了已排序的部分 if data[j-1] > data[j]: data[j], data[j-1] = data[j-1], data[j] # 交换,找到合适的位置插入 j -= 1 # 持续遍历已排序的部分 i += 1 #下一个元素 data1 = [6, 5, 3, 1, 8, 7, 2, 4] insert_sort(data1) print(data1)
# Python for语句 8行 def insert_sort(data): for i in range(1, len(data)): # 从第二个位置,即下标为1的元素开始向前插入 for j in range(i, 0, -1): # 特别重要,注意range的参数,从第i个元素开始向前比较,如果小于前一个元素,交换位置 if data[j-1] > data[j]: data[j], data[j-1] = data[j-1], data[j] data1 = [6, 5, 3, 1, 8, 7, 2, 4] insert_sort(data1) print(data1)