//直接插入排序
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#define N 10
int E[]={213,111,222,77,400,300,987,1024,632,555};
//两个函数皆可使用
//方法一
void si_sort(int e[],int n)
{
int i,j,t;
for(i=1;i<n;i++)//控制e[i],e[i+1],...e[n-1]的比较插入步骤
//找到e[i]的插入位置
{ //从小到大排序
for(t=e[i],j=i-1;j>=0&& t<e[j];j--)
e[j+1]=e[j];//满足条件,j顺序右移;
//不满足条件执行将e[j]的值放在e[i]的位置上(只是用e[j+1]表示),//e[i-1]的值赋给e[i]
//然后再执行j--
e[j+1]=t;//外循环j有两种取值:1、符合时,e[i]的值保持不变;2、不符合时,e[i]的值赋给e[i-1] 注意i比j值大1
}
}
方法二
// void si_sort(int e[],int n)
// {
// for (int i = 1; i < n; i++)
// {
// int t = e[i];
// int j = i;
// while ((j > 0) && (e[j - 1] > t))
// {
// e[j] = e[j - 1];//交换顺序
// --j;
// }
// e[j] = t;
// }
// }
//
void main()
{
int i;
printf("插入排序 初始数据序列为:\n");
for(i=0;i<N;i++)
printf("%d ",E[i]);
printf("\n ");
si_sort(E,N);
for(i=0;i<N;i++)
printf("%d ",E[i]);
}