• 数组排序:冒泡法和选择法


    1.冒泡法

    假设有10个数

    第1趟比较时,将10个数中最大的数沉到最底下,位于在a[10]的位置;

    第2趟比较时,将剩下9个数中最大的数沉到最底下,位于在a[9]的位置;

    ……

    依次类推,要往下沉9次,即进行9趟比较,才能将顺序排好。

    趟数 i=n-1;

    第1趟比较,需要进行9次两两比较,j=9;

    第2趟比较,已有1个数位置固定,需要进行8次两两比较,j=8;

    ……

    依次类推,需要第 i 趟比较,两两比较的次数为 j=9-i=n-1-i; 

     1 #include<stdio.h>
     2 
     3 void main()
     4 {
     5     setvbuf(stdout,NULL,_IONBF,0);
     6     int a[10];
     7     int i,j;
     8     int t;
     9 
    10     printf("input 10 numbers:
    ");
    11     for(i=0;i<10;i++)
    12         scanf("%d",&a[i]);
    13     printf("
    ");
    14 
    15     for(i=0;i<9;i++)            //进行n-1趟比较
    16         for(j=0;j<9-i;j++)        //每趟比较中,有n-1-i次比较
    17         {
    18             if(a[j]>a[j+1])        //比较相邻两个数
    19             {
    20                 t = a[j];
    21                 a[j] = a[j+1];
    22                 a[j+1] = t;
    23             }
    24         }
    25     printf("The sorted numbers:
    ");
    26     for(i=0;i<10;i++)
    27         printf("%d ",a[i]);
    28     printf("
    ");
    29 }
    冒泡法

    2.选择法

    假设有10个数

    先将10个数中最小的数与a[0]对换;

    再将a[1]到a[9]中最小的数与a[1]对换;

    ……

    每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。 

     1 #include<stdio.h>
     2 
     3 void main()
     4 {
     5     setvbuf(stdout,NULL,_IONBF,0);
     6     int a[10];
     7     int i,j;
     8     int min;
     9     int t;
    10 
    11     printf("input 10 numbers:
    ");
    12     for(i=0;i<10;i++)
    13         scanf("%d",&a[i]);
    14     printf("
    ");
    15 
    16     for(i=0;i<9;i++)
    17     {
    18         //找出a[i]到a[n]中最小的那个数的编号min
    19         min = i;
    20         for(j=i+1;j<10;j++)
    21             if(a[j]<a[min])
    22                 min = j;
    23         
    24         //将最小的数a[min]与a[i]交换位置
    25         t = a[min];
    26         a[min] = a[i];
    27         a[i] = t;
    28     }
    29     printf("The sorted numbers:
    ");
    30     for(i=0;i<10;i++)
    31         printf("%d ",a[i]);
    32     printf("
    ");
    33 }
    选择法
  • 相关阅读:
    【技术博客】利用handler实现线程之间的消息传递
    BUAA软件工程个人作业-软件案例分析
    BUAA软件工程结对项目作业
    BUAA软件工程个人项目作业
    BUAA软件工程个人博客作业
    BUAA-软件工程第一次作业
    BUAA-OO-最后单元总结
    BUAA-OO-第三单元总结
    BUAA-OO-第二单元总结
    第四单元总结&&OO总结
  • 原文地址:https://www.cnblogs.com/Camilo/p/3340392.html
Copyright © 2020-2023  润新知