您的位置:首页 > 其它

插入排序

2015-08-13 16:41 190 查看
插入排序的思想便是“逐个比较”。

1 文字表述:

1)设置一个循环,从第二个数字开始(索引为1)不断与前面的数字相比。
2)每次循环开始时作为比较的数的索引为j,设置temp为其值。(因为比如将”8“赋值到”7“的位置时,如果不将”7“保存起来,那么便丢失了这个数字。)
3)取得j的前一位i。
4)只要i仍在数组中,并且索引为i处的值大于temp,就将i后一位的值设为i处的值,同时将i减1。
5)在i不在数组中或i处的值不必temp大时结束第四部的循环,然后将i后一位的值设置为temp。


2 伪码表示:

INSERTION-SORT(A)
for j = 2 to A.length                  // 代价c1,次数n
temp=A[j];                         // 代价c2,次数n-1
// 将A[j]插入到已排序的A[1..j-1]      // 代价0,次数n-1
i=j-1;                             // 代价c4,次数n-1
while i>0 and A[i]>temp            // 代价c5
A[i+1]=A[i];                   // 代价c6
i=i-1;                         // 代价c7
A[i+1]=temp;                       // 代价c8,次数n-1


3 算法实现:

#include<stdio.h>

void insort(int a[],int n);

int main(){
int array[5],num;
printf("数组长度:\n");
scanf("%d",&num);
printf("pls input\n");
for(int i=0;i<num;i++){
scanf("%d",&array[i]);}
insort(array,num);
for(int i=0;i<num;i++)
printf("%d",array[i]);
return 0;

}
void insort(int a[],int n){
for(int j=1;j<n;j++){
int key=a[j];
int i=j-1;
while(i>0&&a[i]>key){
a[i+1]=a[i];
i=i-1;
}
a[i+1]=key;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: