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

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

//r[0]用作哨兵单元
j=i-1;
while(r[0]<r[j])
{ 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");
*(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();
}//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);
2011-12-7 23:24 最佳答案 已经测试过可行。
#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];
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-1) [n>=2] 个数已经是排 好顺序的,现在要把第 n 个数插到前面的有序数中,使得这 n 个数 也是排好顺序的。如此反复循环,直到全部排好顺序。 直接插入排序是稳定的。算法时间复杂度 O(n^2) 算法实现: /* 功能:直接插入排序 输入:数组名称(也就是数组首地址)、数组中元素个数 */ void insert_sort(int *x, int n) { int i, j, t; for (i=1; i<n; i++) /*要选择的次数:1~n-1 共 n-1 次*/ {
/* 暂存下标为 i 的数。注意:下标从 1 开始,原因就是开始时 第一个数即下标为 0 的数,前面没有任何数,单单一个,认为 它是排好顺序的。
*/ t=*(x+ I ); for (j=i-1; j>=0 && t<*(x+j); j--) /*注意:j=i-1,j--,这里就是下标为 i 的数,在它前面有序 列中找插入位置。*/ {
}
#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])
{ 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");
Βιβλιοθήκη Baidu
}//for
}//Insertsort
输入格式 第一行:键盘输入待排序关键的个数 n 第二行:输入 n 个待排序关键字,用空格分隔数据
输出格式 每行输出一趟排序结果,数据之间用一个空格分隔
输入样例 10 5480932671 输出样例 4580932671 4580932671 0458932671 0458932671 0345892671 0234589671 0234568971 0234567891 0123456789
相关文档
最新文档