您的位置:首页 > 其它

插入排序之----直接插入排序

2011-12-04 10:43 232 查看
直接插入排序是稳定的排序方法。

基本思路:依次把待排序的记录逐一按其关键字的大小插入到一个已经排好序的有序序列中去,直到所有的记录插完位置,得到一个新的有序序列。

算法的思路:

1.设置监视哨x,将待排序的数据赋给x,对于整个数组的排序而言,一般选第二个数据;

2.设置开始查找的位置j = i - 1;

3.在数组中先前扫描,扫描中将第j个记录后移,并且j--,为下一次循环做准备,直到x>=buf[j]为止;

4.将x插入在j+1的位置。

#include<stdio.h>
#define Type char

void zj_insert(Type *buf, int n)
{
int i,j;
Type x ;
for(i = 1; i < n; i++)  //从数组中第二个数开始排序,进行n-1趟排序
{
x = buf[i];         //设置监视哨,把待插入的数据赋值给它
j = i - 1;          //从i-1开始往前比较
while(x < buf[j])   //确定插入位置。直到x>=buf[j]为止。
{
buf[j + 1] = buf[j];//如果x < buf[j],将第j个元素往后移,
j--;                //并且j--为下一次比较做准备。
}
buf[j + 1] = x;       //插入待排序的数
}
}

int main()
{
int i;
Type num[11] = "asdfghjkloq";  //{1,11,23,32,24,3,5,8,10,16,22}

printf("Original array:");
for(i = 0; i < 11; i++)
printf("%c ", num[i]); //注意输出格式的替换
printf("\n");

zj_insert(num, 11);

printf("Sorted array:");
for(i = 0; i < 11; i++)
printf("%c ", num[i]); //注意输出格式的替换
printf("\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  insert 算法 c