//直接插入排序 #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]); }