排序算法C语言版:直接插入排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

直接插入排序

算法思想简单描述:

在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

直接插入排序是稳定的。算法时间复杂度O(n^2)

算法实现:

/*

功能:直接插入排序

输入:数组名称(也就是数组首地址)、数组中元素个数

*/

void insert_sort(int *x, int n)

{

int i, j, t;

for (i=1; i

{

/*

暂存下标为i的数。注意:下标从1开始,原因就是开始时

第一个数即下标为0的数,前面没有任何数,单单一个,认为它是排好顺序的。

*/

t=*(x+ I );

for (j=i-1; j>=0 && t<*(x+j); j--) /*注意:j=i-1,j--,这里就是下标为i的数,在它前面有序列中找插入位置。*/

{

*(x+j+1) = *(x+ j ); /*如果满足条件就往后挪。最坏的情况就是t比下标为0的数都小,它要放在最前面,j==-1,退出循环*/

}

*(x+j+1) = t; /*找到下标为i的数的放置位置*/

}

}

#include "stdio.h"

#include "conio.h"

main()

{

int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j;

printf("original array is:\n");

for(i=0;i<10;i++)

printf("%5d",a[i]);

printf("\n");

printf("insert a new number:");

scanf("%d",&number);

end=a[9];

if(number>end)

a[10]=number;

else

{

for(i=0;i<10;i++)

{

if(a[i]>number)

{

temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++)

{

temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

for(i=0;i<11;i++)

printf("%6d",a[i]);

getch();

}

#include"stdio.h"

#define MAXSIZE 20//一个用作示例的小顺序表的最大长度int Insertsort(int r[],int n)

{//作直接插入排序

int i,j;

for(i=2;i<=n;i++)

{ r[0]=r[i]; //r[0]用作哨兵单元

j=i-1;

while(r[0]

{ r[j+1]=r[j]; //记录后移

j--;

}//while

r[j+1]=r[0]; //插入到正确位置

for(j=1;j<=n;j++) //输出每趟排序的结果

{

printf("%d ",r[j]);

}//for

printf("\n");

}//for

}//Insertsort

int main()

{

int n,i; //待排序的关键字个数

int r[MAXSIZE];

scanf("%d",&n);

for(i=1;i<=n;i++)//输入待排序的关键字

scanf("%d",&r[i]);

Insertsort(r,n);

}

8638 直接插入排序

描述

用函数实现直接插入排序,并输出每趟排序的结果.

输入格式

第一行:键盘输入待排序关键的个数n

第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出一趟排序结果,数据之间用一个空格分隔

输入样例

10

5 4 8 0 9 3 2

6

7 1

输出样例

4 5 8 0 9 3 2 6 7 1

4 5 8 0 9 3 2 6 7 1

0 4 5 8 9 3 2 6 7 1

0 4 5 8 9 3 2 6 7 1

0 3 4 5 8 9 2 6 7 1

0 2 3 4 5 8 9 6 7 1

0 2 3 4 5 6 8 9 7 1

0 2 3 4 5 6 7 8 9 1

0 1 2 3 4 5 6 7 8 9

2011-12-7 23:24

最佳答案

已经测试过可行。

#include"stdio.h"

#define MAXSIZE 20//一个用作示例的小顺序表的最大长度int Insertsort(int r[],int n)

相关文档
最新文档