1、概述
在排序算法中,插入排序往往是我们最开始接触的算法之一,对于他的理解,我想接触过一段编程的人都会接触这个算法。
那么究竟插入排序是怎么一回事呢?下面我们就打斗地主扑克牌来打个比方:(嘿嘿,适当娱乐)
加入我们打牌三人一人发了一堆牌,这是我们还没清理好顺序。假设我们一张一张的拿起来清理,每拿起一张牌我们都会在排序好手中的牌,这个就是插入排序的基本思想。
2、介绍
就拿上面的打牌来说,你自己的那一部分牌就是我们所需要排序的数据,我们怎么排序数据呢?这里我们选定一个哨兵,就好像我们每次把,每排序一个数据(就是每次拿起的一张需要插入的牌)我们都会去与已经排序好的数据进行比较才知道数据应该插入到哪里!
3、C语言实现
#include <stdio.h> void insertion( int a[], int l, int r ); //插入排序 void display( int a[], int l, int r ); //打印数据 int main(int argc, char const *argv[]) { int a[100]; int n = 0, i; scanf("%d", &n); for ( i = 0; i < n; ++i) //初始化数据 { scanf("%d", &a[i]); } insertion( a, 0, n-1 ); display( a, 0, n-1 ); return 0; } void insertion( int a[], int l, int r ) { int i, j, v; for (i = l+1; i <= r; ++i) //外层遍历 { v = a[i]; for ( j = i; j > l; --j) //插入到已排序号的部分 { while( v < a[j-1] && j > l) //插入的过程中,我们从要插入的数据开始向前遍历,不用借助外部变量方便数据移动 { a[j] = a[j-1]; --j; } a[j] = v; } //display( a, l, r );这里我们可以看到每一次插入后的效果 } } void display( int a[], int l, int r ) { int i; for ( i = l; i <= r; ++i) { printf("%d ", a[i] ); } printf("\n"); }