• C语言几种排序算法


    (1)选择排序算法:选择排序算法是,将第一个数和其它的数比较,将较小的数(从小到大的排列)和第一个数换位,以此类推

    #include<stdio.h>
    int main()
    {
        int i,j;   /*i用来存储数值最小的数组元素的数值,j用来存储该元素的位置*/
        int a[10]; /*定义一个数组用来存储用户输入的数据*/
        int iTemp;
        int iPos;
        /*通过双层循环进行选择排序,最后输出排序后的结果*/
        printf("为数组元素赋值:
    ");
        for(i=0;i<10;i++)
        {
             printf("a[%d]=",i);
             scanf("%d",&a[i]);
        }
         /*从小到大排序*/
        for(i=0;i<9;i++) /*设置外层为下标0-8的元素*/
        {
             iTemp=a[i]; /*设置当前元素为最小值*/
             iPos=i;     /*记录元素的位置*/
             for(j=i+1;j<10;j++)
             {
                  if(a[j]<iTemp)  /*如果当前元素比最小元素还小*/
                  {
                       iTemp=a[j];/*重新设置最小值*/
                       iPos=j;    /*记录元素位置*/
                  }    
             }
             /*交换两个元素的位置*/
             a[iPos]=a[i];
             a[i]=iTemp;  
        }
        /*输出数组*/
        for(i=0;i<10;i++)
        {
            printf("%d	",a[i]);
            if(i==4)   /*如果是第五个元素*/
            {
                 printf("
    ");/*输出换行*/
            }
        }
        return 0;
    }
    

    (2)冒泡排序算法:冒泡排序算法是指在排序时,每次比较数组中两个相邻的元素的值,将较小的数排在较大的数的前面(从小到大的排序)。

    #include<stdio.h>
    int main()
    {
        int i,j; 
        int a[10];
        int iTemp;
        printf("位数组元素赋值:
    ");
        /*位数组元素赋值*/
        for(i=0;i<10;i++)
        {
            printf("a[%d]=",i);
            scanf("%d",&a[i]);
        }
        /*由小到大排序*/
        for(i=1;i<10;i++)
        {
            for(j=9;j>=i;j--)
            {
                if(a[j]<a[j-1])
                {
                     iTemp=a[j-1];
                     a[j-1]=a[j];
                     a[j]=iTemp;
                 }
            }
        }
        for(i=0;i<10;i++)
        {
            printf("%d	",a[i]);
        }
        return 0;
    }
    

    (3)交换排序算法:交换排序算法是将每一位数与其它所有数进行比较,如果发现符合条件的数据则交换位置,具体的代码如下:

    #include<stdio.h>
    int main()
    {
        int i,j;
        int iTemp;
        int a[10];
        /*输入十个数字*/
        printf("请输入10个数字:
    ");
        for(i=0;i<10;i++)
        {
            printf("a[%d]=",i);
            scanf("%d",&a[i]);
        }
        /*从小到大排序*/
        for(i=0;i<9;i++)          /*外层循环为0-8*/
        {
            for(j=i+1;j<10;j++)   /*内层循环为i+1-9*/
            {
                 if(a[j]<a[i])    /*如果当前值比其它值大*/
                 {
                      /*交换数值*/
                      iTemp=a[i];
                      a[i]=a[j];
                      a[j]=iTemp;
                 }
            }   
        }
        /*输出数组*/
        for(i=0;i<10;i++)
        {
             printf("%d	",a[i]);        
        }
        return 0;
    }
    

    (4)插入排序算法:

    #include<stdio.h>
    int mian()
    {
        int i,j;
        int a[10];
        int iTemp;
        int iPos;
        /*输入十个数*/
        printf("请输入10个数字:
    ");
        for(i=0;i<10;i++)
        {
             printf("a[%d]=",i);
             scanf("%d",&a[i]);
        }
        /*使用插入法按大小排序数组中的元素*/
        for(i=0;i<10;i++)     /*循环数组中的元素*/
        {
             iTemp=a[i];
             iPos=i-1;
             while((iPos>=0)&&(iTemp)<a[iPos]   /*寻找插入值的位置*/
             {
                  a[iPos+1]=a[iPos];
                  iPos-;
             }
             a[iPos+1]=iTemp;    
        }
        /*输出*/
    }
    

      

  • 相关阅读:
    删数问题
    装箱问题
    活动选择
    智力大冲浪
    三国游戏
    最大乘积
    排队接水
    线段覆盖
    高精度重载运算符
    数的划分
  • 原文地址:https://www.cnblogs.com/deng-c-q/p/4920791.html
Copyright © 2020-2023  润新知