插入排序假设一个key,通过不断的比较而形成一个有序的数列,比如一个数组,我们从第二个值开始设为key,然后比较前面的数字,如果前一个值比它大(我们假定是升序排序),则前面值后移一位,key值取代其位置,结束一次排序。然后第三个值设为key,向前比较,若比起大,则互换位置,接着拿key值向前比较,出现比key值小或相等的数时,完成一次排序,此时key值原来的位置之前的数都是有序的了。接着往下设key值。知道最后一个。(可以到网上看一下相关的图示)。下面是相关代码(本人并不擅长C语言,如果代码有什么不合适的地方,尽情见谅,但保证代码是可以运行的)。
/** 插入排序 Author:iPolaris **/ #include "stdio.h" int main(int argc, char const *argv[]) { int nums[10] = {2,6,13,67,35,1,5,6,9,12};//需要排序的数组,此处我们实现升序 for (int i = 1; i < 10; i++)//在插入排序中,可以先跳过第一个元素,从第二个元素开始 { int num = nums[i]; int temp = 0; //与i之前的数字进行比较,直到遇到出现num = num[j]或num>num[j],其他情况num[j]后移一位 for (int j = i -1; j>-1; j--) { if (num<nums[j]) { //互换位置 nums[j+1] = nums[j]; nums[j] = num; }else{ continue; } for (int i = 0; i < 10; ++i) { printf("%d,", nums[i]); } printf("\n"); } } return 0; }
运行结果如下:
2,6,13,35,67,1,5,6,9,12, 2,6,13,35,1,67,5,6,9,12, 2,6,13,1,35,67,5,6,9,12, 2,6,1,13,35,67,5,6,9,12, 2,1,6,13,35,67,5,6,9,12, 1,2,6,13,35,67,5,6,9,12, 1,2,6,13,35,5,67,6,9,12, 1,2,6,13,5,35,67,6,9,12, 1,2,6,5,13,35,67,6,9,12, 1,2,5,6,13,35,67,6,9,12, 1,2,5,6,13,35,6,67,9,12, 1,2,5,6,13,6,35,67,9,12, 1,2,5,6,6,13,35,67,9,12, 1,2,5,6,6,13,35,9,67,12, 1,2,5,6,6,13,9,35,67,12, 1,2,5,6,6,9,13,35,67,12, 1,2,5,6,6,9,13,35,12,67, 1,2,5,6,6,9,13,12,35,67, 1,2,5,6,6,9,12,13,35,67,