插入排序最典型的例子,就是玩扑克牌,每次将新的插入到已排好序的牌中。
也就是说,插入排序将数据分成两部分,一部分是已排好序的数,另一部分是待插入数据,每次从待插入数据中取出数插入已排好序的数中,具体过程如下:
( 1 ) 在已排好序的数据中查找插入位置position
( 2 ) 移动相对应的数据,以空出position
( 3 ) 将待插入元素插入位置position
void insert_sort(ElemType array[],int length){
int inner,outer,i;
int temp,position;
if(array == NULL || length == 0)
exit(-1);
for(outer = 1; outer < length ;outer++){
//取出待插入元素
temp = array[outer];
//查找插入位置
for(inner = 0; inner < outer; inner++){
//如果当前元素比待插入元素大,则找到位置
if(array[inner] > temp){
position = inner;
//相应元素后移
i = outer;
while(i > position){
array[i] = array[i-1];
i--;
}
//将待插入元素插入到position
array[position] = temp;
break;
}
}
}
}
其实,插入排序还有另一种思路,即
( 1 ) 将待插入元素与已排好序的元素按序比较
( 2 ) 如果待插入元素小,则交换当前元素与待插入元素
( 3 ) 重复执行,直到结束。
代码如下:
void insert_sort(ElemType array[],int length){
int inner,outer,median,i;
int temp,position;
if(array == NULL || length == 0)
exit(-1);
for(outer = 1; outer < length ;outer++){
for(inner = 0; inner < outer; inner++){
if(array[inner] > array[outer]){
median = array[inner];
array[inner] = array[outer];
array[outer] = median;
}
}
}
}
这个代码是不是比上面的少多了,看起来好像也简单点哦。