排序算法

选择排序

     #include <stdio.h>
     int main()
     {
        int i,j,t,a[9];    //定义变量及数组为基本整型
        printf("请输入8个数:\n");
        for(i=1;i<9;i++)
        scanf("%d",&a[i]);    //从键盘中输入要排序的10个数字
        for(i=1;i<=9;i++)
        for (j=i+1;j<=8;j++)
        if(a[i]>a[j])    //如果前一个数比后一个数大,则利用中间变量t实现两值互换
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
          printf("排序后的顺序是:\n");
          for(i=1;i<=8;i++)
          printf("%5d", a[i]);    //输出排序后的数组
          printf("\n");
          return 0;
      }

冒泡排序

  #include <stdio.h>
  int main(void)
  {
       int a[] = {12,23,8,15,33,24,77,55};
       int n;  //存放数组a中元素的个数
       int i;  //比较的轮数
       int j;  //每轮比较的次数
       int buf;  //交换数据时用于存放中间数据
       n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
       for (i=0; i<n-1; ++i)  //比较n-1轮
    {
    for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
    {
        if (a[j] < a[j+1])
        {
            buf = a[j];
            a[j] = a[j+1];
            a[j+1] = buf;
        }
       }
   }
      for (i=0; i<n; ++i)
   {
       printf("%d\x20", a[i]);
   }
       printf("\n");
       return 0;
  }


插入排序

   #include <stdio.h>
    //自定义的输出函数
    void print(int a[], int n ,int i){
    printf("%d:",i);
    for(int j=0; j<8; j++){
    printf("%d",a[j]);
    }
     printf("\n");
      }
    //直接插入排序函数
     void InsertSort(int a[], int n)
    {
       for(int i= 1; i<n; i++){
        if(a[i] < a[i-1]){//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。
        int j= i-1;
        int x = a[i];
        while(j>-1 && x < a[j]){  //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出 
        空间
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = x;      //插入到正确位置
    }
    print(a,n,i);//打印每次排序后的结果
     }
       }
   int main(){
   int a[8] = {12,23,8,15,33,24,77,55};
   InsertSort(a,8);
  return 0;
   }


快速排序

posted on 2022-10-09 19:50  20221305赵月溪  阅读(3)  评论(0编辑  收藏  举报

导航