c语言排序(持续更新)

来源:互联网 发布:淘宝做单查号怎么查 编辑:程序博客网 时间:2024/05/16 14:20

因为作者正在持续学习,所以该博客将会持续更新

  1. 桶序法
  2. 冒泡法
  3. 简单排序法
  4. 直接插入法
  5. 希尔排序法

桶序法
这里写图片描述

#include <stdio.h>#define N 11int main(void){    int a[11]={1,4,3,6,1,8,9,10,22,33,12};    int b[101]={0};//数组b全部初始化为0     for (int i=0;i<N;i++){        b[a[i]]++;    }    for (int j=0;j<101;j++){        while(b[j]!=0){            printf("%d\t",j);            --b[j];        }    }    getchar();}

冒泡法
这里写图片描述

#include <stdio.h>#define N 11int main(void){    int i,j;    int a[11]={0,4,3,6,1,8,9,10,22,33,12};    //第一个作为一个交换介质     for (i=1;i<N;i++){        for (j=i;j<N;j++){            if (a[i]>a[j])                a[i]=a[i]+a[j]-(a[j]=a[i]);         }    }    for (int i=1;i<N;i++){        printf("%d\t",a[i]);    }    getchar();}

简单排序
这里写图片描述

#include <stdio.h>#define N 11int main(void){    int i,j;    int temp;    int a[11]={0,4,3,6,1,8,9,10,22,33,12};    //第一个作为一个交换介质     for (i=1;i<N;i++){        a[0]=a[i];        for (j=i+1;j<N;j++){            if (a[0]<a[j]){                a[0] = a[j];                temp = j;            }        }        if(a[i] != a[0] )            a[i] = a[temp] + a[i]-(a[temp] = a[i]);     }    for (int i=1;i<N;i++)        printf("%d\t",a[i]);    getchar();}

直接插入排序法
这里写图片描述

#include <stdio.h>#define N 11int main(void){    int i,j;    int a[11]={0,4,3,6,1,8,9,10,22,33,12};    for (i=2;i<N;i++){        if( a[i] > a[i-1])          {            a[0] = a[i];            for (j = i-1;a[j]<a[0];j--)                a[j+1] = a[j];//后移             a[j+1] = a[0];        }    }    for (int i=1;i<N;i++)        printf("%d\t",a[i]);    getchar();}
希尔排序法

这里写图片描述

#include <stdio.h>#define N 11int main(void){    int i,j;    int d,x;     int a[11]={0,4,3,6,1,8,9,10,22,33,12};    d = N/2;                        //计算第一次的增量     while(d>=1){        for ( i = d; i < N; i++){            x = a[i];               //获取序列中的写一个数据             j = i-d;                //序列中前一个数据的序号             while(j>0 && a[j]>x){   //下一个数大于前一个数                 a[j+d] = a[j];      //将后一个数向前移动                 j -= d;             //修改序号,继续向前比较             }            a[j+d] = x;             //保存数据         }        d /= 2;                     //缩小增量      }    for ( i =0; i<N; i++)            printf("%d\t",a[i]);        getchar();}

希尔排序(自己理解之后写的)

#include <stdio.h>#define N 11int main(void){    int i,j;    int d,x;     int a[N]={11,33,29,6,1,8,9,10,22,3,12};    d = N/2;    while(d>=1){        for (i = 0; i<= d;i++){            for (x = 0;x<N-d;x++)                if(a[x]>a[x+d])                    a[x] = a[x]+a[x+d]-(a[x+d]=a[x]);        }        d /=2;    }    for ( i =0; i<N; i++)            printf("%d\t",a[i]);        getchar();}