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