C语言插入法排序

栽法排序较为复杂,其中心工作规律是抽出一个数量,在面前的数量被寻找对应的岗位插入,直到好排序。以数字9、6、15、4、2乎条例,采用扦插法贯彻数字以自小到死进展排序,插入法排序过程要图8.23所展示。

 C语言 1

贪图8.23 
插入法排序过程示意图

打图8.23可以发现,在率先浅排序过程中将第一只数取出来,并停于第一独岗位;然后取出第二独数,并拿第二个数及第一个数进行较,如果第二个数小于第一个数,则拿第二独数破在第一个数之前,否则用第二单数解在率先个数之后;然后取出下一个屡,先跟消除在后头的数字进行比,如果手上数字比较老则败在结尾,如果手上数字比较粗,还要跟事先的数字进行较,如果手上数字比较前的数字略,则用目前数字排在较她有点之数字与于其那个的数字中,如果没比较当下数字略之数字,则拿手上数字排在无比前沿;依此类推,不断取出未进行排序的数字和排序好之数字进行较,并插入到相应的职务,直到将同样组数字以自小到深排序为止。

下面通过实例来拘禁一下什么样通过序采取插入法贯彻数组元素于小至异常之排序。

实例 利用插入排序法,从少到几近输出显示老人的数额

朝福利,根据老年人发放养老补助。在本实例中,声明了一个整型数组和片独整型变量,其中整型数组用于存储用户输入的数字,而个别单整型变量分别作为片只要素交换时之中等变量和记录数组元素位置,然后通过双层循环进行插队入法排序,最后用免去好序的数组进行输出。具体代码如下:

01  #include<stdio.h>/*包含头文件*/

02  int main()      /*主函数main*/

03  {

04       int i;                                      /*定义变量*/

05       int a[10];

06       intiTemp;

07       intiPos;

08       printf("输入老人数:\n");                   /*提示信息*/

09       for(i=0;i<10;i++)                           /*输入老人数据*/

10       {

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

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

13       }

14   

15       /*从小到大排序*/

16       for(i=1;i<10;i++)                           /*循环数组中元素*/

17       {

18           iTemp = a[i];                       /*设置插入值*/

19           iPos = i-1;

20           while((iPos>=0) && (iTemp<a[iPos]))         /*寻找插入值的位置*/

21           {

22               a[iPos+1] = a[iPos];                    /*插入数值*/

23               iPos--;

24           }

25           a[iPos+1] = iTemp;

26       }

27   

28       /*输出数组*/

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

30       {

31           printf("%d\t",a[i]);                    /*输出制表位*/

32           if(i == 4)                      /*如果是第5个元素*/

33               printf("\n");           /*输出换行*/

34       }

35   printf("\n");

36   

37       return 0;                           /*程序结束*/

38  }

 

运转程序,显示结果如图8.24所显示。

C语言 2

祈求8.24 
插入法排序运行图

打该实例代码和运作结果好观看:

(1)声明一个整型数组a,并由此键盘为数组元素赋值。

(2)设置一个嵌套循环,第一重叠循环呢继9独数组元素,将第二个要素赋值给中变量,并记录面前一个数组元素的下标位置。在亚交汇循环中,首先使看清是否顺应循环的基准,允许循环的准绳是记录之下标位置要超出等于第一个数组元素的下标位置,并且中间变量的价值小于前安装下标位置的数组元素,如果满足循环条件,则用装下标位置的反复组元素值赋值给当下之数组元素。

(3)然后拿记录的数组元素下标位置上走一各类,继续进行巡回判断。内层循环结束之后,将中变量中保存的数值赋值给当下记下之下标位置然后的数组元素,继续进行外围循环,将数组中产一个数组元素赋值给中变量,再通过内层循环进行排序。

(4)依此类推,直到循环结束,这时便用数组元素以自小到特别的顺序重新排列了。

(5)循环输出数组C语言中之要素,并于出口5独元素后展开换行,在生一行输出后面的5个要素。

 

正文摘自明科技出版的《零基础学C语言》,转载请注明出处!!!