• C语言 排序算法总结


      1 #include<stdio.h>
      2 #include<stdlib.h>
    //作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
      3 #define N 20
      4 //冒泡排序
      5 void bubble(int a[],int n){
      6     int i,j,temp;
      7     for(i=0;i<n-1;i++){
      8         for(j=0;j<n-1-i;j++){
      9             if(a[j]>a[j+1]){
     10                 temp=a[j];
     11                 a[j]=a[j+1];
     12                 a[j+1]=temp;
     13             }
     14         }
     15     }
     16 }
     17 
     18 //选择排序
     19 void select(int a[],int n){
     20     int i,j,min,temp;
     21     for(i=0;i<n-1;i++){
     22         min=i;
     23         for(j=i+1;j<n;j++){
     24             if(a[j]<a[min]){
     25                 min=j;
     26             }
     27         }
     28         if(min!=i){
     29             temp=a[i];
     30             a[i]=a[min];
     31             a[min]=temp;
     32         }
     33     }
     34 }
     35 //直接插入排序
     36 void insert(int a[],int n){
     37     int i,j,temp;
     38     for(i=1;i<n;i++){
     39         temp=a[i];
     40         j=i-1;
     41         while((temp<a[j]) && (j>=0)){
     42             a[j+1]=a[j];
     43             j--;
     44         }
     45         a[j+1]=temp;
     46     }
     47 }
     48 //折半插入排序
     49 void bi_insert(int a[],int n){
     50     int i,j,low,high,mid,temp;
     51     for(i=1;i<n;i++){
     52         temp=a[i];
     53         low=0;
     54         high=i-1;
     55         while(low<=high){
     56             mid=(low+high)/2;
     57             if(a[mid]>temp){
     58                 high=mid-1;
     59             }
     60             else
     61                 low=mid+1;
     62         }
     63         for(j=i-1;j>=high+1;--j){
     64             a[j+1]=a[j];
     65         }
     66         a[high+1]=temp;
     67     }
     68 }
     69 //堆排序
     70 void sift(int a[],int low,int high){
     71     int i=low,j=i*2,t=a[i];
     72     while(j<=high){
     73         if(j<high && a[j]<a[j+1]){
     74             ++j;
     75         }
     76         if(t<a[j]){
     77             a[i]=a[j];
     78             i=j;
     79             j=2*i;
     80         }
     81         else
     82             break;
     83     }
     84     a[i]=t;
     85 }
     86 
     87 void heap(int a[],int n){
     88     int i,temp;
     89     for(i=n/2;i>=1;--i){
     90         sift(a,i,n);
     91     }
     92     for(i=n;i>=2;--i){
     93         temp=a[i];
     94         a[i]=a[1];
     95         a[1]=temp;
     96         sift(a,1,i-1);
     97     }
     98 }
     99 
    100 
    101 void main(){
    102     int a[N];
    103     int i,k,m;
    104     printf("Please input a number:");
    105     scanf("%d",&m);
    106     printf("Please input %d numbers:
    ",m);
    107     for(i=0;i<m;i++){
    108         scanf("%d",a+i);
    109     }
    110     while(1){
    111         printf("1.冒泡排序
    2.选择排序
    3.直接插入排序
    4.折半插入排序
    5.堆排序
    0.exit
    Please choose:");
    112         scanf("%d",&k);
    113         switch(k)
    114         { 
    115         case 1: bubble(a,m);break;
    116         case 2: select(a,m);break;
    117         case 3: insert(a,m);break;
    118         case 4: bi_insert(a,m);break;
    119         case 5: heap(a,m-1);break;
    120         case 0: printf("Byebye!
    ");system("pause");exit(0);
    121         default :printf("Input error!
    Please choose again:
    ");continue;
    122         }
    123         printf("Result:
    ");
    124         for(i=0;i<m;i++){
    125             printf("%4d",a[i]);
    126         }
    127         printf("
    ");
    128     }
    129     system("pause");
    130 }

    结果为:

  • 相关阅读:
    eclipse禁用svg文件Validation
    在centos上安装jenkins
    5.volatile的应用
    4.资源限制
    linux git保存用户名密码(避免每次push输用户名密码)
    mysql 从库落后主库太多优化
    mfs使用指引
    Asura监控---AsuraMonitor,阿修罗监控开源
    docker overlay网络实现
    ELK+kafka日志收集
  • 原文地址:https://www.cnblogs.com/kailugaji/p/8590835.html
Copyright © 2020-2023  润新知