zoukankan      html  css  js  c++  java
  • 经典排序算法+文件操作~c语言实现

      1  #include <malloc.h>
      2  #include <stdio.h>
      3  #include <time.h>
      4  #include <stdlib.h>
      5  #define MAXSIZE 10
      6 typedef struct {
      7      int L[MAXSIZE+1];
      8      int length;
      9  
     10  }List,*list;
     11  void swap(List &L,int low,int high){
     12      int temp;
     13      temp=L.L[low];
     14      L.L[low] = L.L[high];
     15      L.L[high]=temp;
     16  }
     17  /**************************************
     18   *                 快速排序           *
     19   * ************************************/
     20  
     21  int Partition(List &L,int low,int high){
     22      int pro;
     23      pro=L.L[low];
     24      while(low<high){
     25  
     26          while(L.L[high]>=pro&&low<high){
     27                  high--;
     28          }
     29          swap(L,low,high);
     30          while(L.L[low]<=pro&&low<high){
     31              low++;
     32          }
     33  
     34  
     35          swap(L,low,high);
     36  
     37      }
     38      //L.L[low]=L.L[0];
     39      return low;
     40  
     41  }
     42  void Qsort(List &list,int low,int high){
     43      int pivot;
     44      if(low<high){
     45          pivot = Partition(list,low,high);
     46          Qsort(list,low,pivot-1);
     47          Qsort(list,pivot+1,high);
     48      }
     49  
     50  }
     51  
     52  
     53  /****************************
     54   *             冒泡排序            *
     55   * **************************/
     56   void bubbleSort(List &list){
     57       int i,j;
     58       bool flag=1;
     59       for(i=1;i<=list.length&&flag;i++){
     60           flag=0;
     61           for(j=list.length-1;j>=i;j--){
     62               if(list.L[j]>list.L[j+1]){
     63                   swap(list,j,j+1);
     64                   flag=1;
     65               }
     66           }
     67       }
     68  
     69   }
     70  /***************************
     71   *        简单选择排序      *
     72   ***************************/
     73   void selectSort(List &list){
     74       int i,j,min;
     75       for(i=0;i<=list.length;++i){
     76           min=i;
     77           for(j=i+1;j<=list.length;++j){
     78               if(list.L[min]>list.L[j]){
     79                   //swap(list,min,j);
     80                   min=j;
     81               }
     82           }
     83          if(i!=min){
     84               swap(list,min,i);
     85           }
     86       }
     87  
     88   }
     89   /*************************
     90    *     直接插入排序          *
     91    *************************/
     92   void insertSort(List &list){
     93       int i,j;
     94       for(i=2;i<=list.length;++i){
     95           if(list.L[i]<list.L[i-1]){
     96               list.L[0]=list.L[i];
     97               for(j=i-1;list.L[j]>list.L[0];--j){
     98                   list.L[j+1]=list.L[j];
     99               }
    100              list.L[j+1]=list.L[0];
    101           }
    102       }
    103   }
    104  /***********************
    105   *         希尔排序    *
    106   ***********************/
    107   void sheelSort(List &list){
    108       int i,j;
    109       int increment=list.length;
    110  
    111       do{
    112           increment = increment/3+1;
    113           for(i=increment+1;i<=list.length;++i){
    114               if(list.L[i]<list.L[i-increment]){
    115                  list.L[0]=list.L[i];
    116                   for(j=i-increment;list.L[0]<list.L[j]&&j>0;j-=increment){
    117                       list.L[j+increment]=list.L[j];
    118                   }
    119                   list.L[j+increment] = list.L[0];
    120               }
    121           }
    122       }while(increment!=1);
    123  
    124   }
    125    /***********************
    126  2   *      归并排序       *
    127  3   ***********************/
    128  
    129  void merge(int SR[],int TR[],int i,int m,int n){
    130        int j,k,l;
    131        for(j=m+1,k=i;i<=m&&j<=n;k++){
    132            if(SR[i]<SR[j]){
    133                TR[k]=SR[i++];
    134            }else{
    135                TR[k]=SR[j++];
    136            }
    137        }
    138          if(i<=m){
    139                for(l=0;l<=m-i;l++){
    140                   TR[k+l]=SR[i+l];
    141                }
    142            }
    143            if(j<=n){
    144                for(l=0;l<=n-j;l++){
    145                    TR[k+l]=SR[j+l];
    146                }
    147            }
    148  
    149  
    150    }
    151  
    152   void mergePass(int SR[],int TR[],int s,int n){
    153       int i=1;
    154       int j;
    155       while(i<=n-(2*s)+1){
    156           merge(SR,TR,i,i+s-1,i+(2*s)-1);
    157           i=i+(2*s);
    158  
    159       }
    160       if(i<n-s+1){
    161           merge(SR,TR,i,i+s-1,n);
    162       }else{
    163           for(j=i;j<=n;j++){
    164               TR[j]=SR[j];
    165           }
    166       }
    167  
    168  
    169   }
    170  void mergeSort2(List* list){
    171       int *TR = (int*)malloc((list->length+1)*sizeof(int));
    172       int k=1;
    173      while(k<list->length){
    174           mergePass(list->L,TR,k,list->length);
    175           k=2*k;
    176           mergePass(TR,list->L,k,list->length);
    177           k=2*k;
    178       }
    179  
    180   }
    181   void mSort(int SR[],int TR1[],int s,int t){
    182       int m;
    183       int TR2[MAXSIZE+1];
    184       if(s==t){
    185           TR1[s]=SR[s];
    186       }else{
    187           m=(s+t)/2;
    188           mSort(SR,TR2,s,m);
    189           mSort(SR,TR2,m+1,t);
    190           merge(TR2,TR1,s,m,t);
    191       }
    192   }
    193   void mergeSort(List* list){
    194      mSort(list->L,list->L,1,list->length);
    195   }
    196  
    197 /****************** 
    198  *      文件操作    * 
    199  ******************/
    200 int createSourceFile(){
    201     FILE *fp;
    202       if((fp = fopen("source.txt","w+"))==NULL){
    203           printf("can not open");
    204            return 1;
    205            //exit(0);
    206       }
    207        srand(time(NULL));
    208        int tag;
    209    for(tag=1;tag<=MAXSIZE;tag++){
    210          
    211      //    list.L[tag] = rand()%2000;
    212          fprintf(fp,"%d ",rand()%2000);
    213      }
    214      fclose(fp);
    215      return 0;
    216 }  
    217 void readSourceFile(List & list){
    218     FILE *fp;
    219       if((fp = fopen("source.txt","r"))==NULL){
    220           printf("can not open");
    221            exit(0);
    222       }
    223       int tag;
    224    for(tag=1;tag<=MAXSIZE;tag++){
    225          
    226      //    list.L[tag] = rand()%2000;
    227          fscanf(fp,"%d ",&list.L[tag]);
    228          //printf("%d ",list.L[tag]);
    229      }
    230      fclose(fp);
    231 }
    232 void createToFile(List &list){
    233     FILE *fp;
    234       if((fp = fopen("to.txt","w+"))==NULL){
    235           printf("can not open");
    236            exit(0);
    237       }
    238        srand(time(NULL));
    239        int tag;
    240    for(tag=1;tag<=MAXSIZE;tag++){
    241          
    242      //    list.L[tag] = rand()%2000;
    243          fprintf(fp,"%d ",list.L[tag]);
    244          if(tag%5==0){
    245          fprintf(fp,"\n");
    246          }
    247      }
    248      fclose(fp);
    249 }
    250 /********************
    251  *        查看list    *
    252  ********************/
    253 void show(List &list){
    254     int i;
    255     for(i=1;i<MAXSIZE+1;i++){
    256     printf("%d,",list.L[i]);
    257     }
    258     printf("\n");
    259 }
    260 
    261 /******************
    262  *        菜单     * 
    263  *****************/
    264  
    265 void mune(){
    266     printf("         ********************\n\
    267      *     排序大集合   *\n\
    268      ********************\n\
    269     ----------------------\n\
    270     |  1.生成随机数文件\n\
    271     |  2.快速排序\n\
    272     |  3.冒泡排序\n\
    273     |  4.简单选择排序\n\
    274     |  5.直接插入排序\n\
    275     |  6.希尔排序\n\
    276     |  7.归并排序(递归)\n\
    277     |  8.归并排序(非递归)\n\
    278     |  9.保存至文件\n\
    279     |  #.查看数据\n\
    280     |  0.退出\n\
    281     ----------------------\n\
    282     请输入您的指令\n");
    283 
    284      //return 
    285  }
    286 
    287  int main(){
    288 
    289      List list={{0},MAXSIZE};
    290      //Qsort(list,0,9);    //快速排序
    291      //bubbleSort(list);
    292      //selectSort(list);
    293      //insertSort(list);
    294     
    295      //createSourceFile();
    296      //readSourceFile(list);
    297      mune();
    298      char num='1';
    299     for(num;num!='0';){
    300         
    301          scanf("%c",&num); 
    302          getchar();
    303           switch(num){
    304         case '1':
    305         if(createSourceFile()){
    306             printf("file error\n");
    307         }else{
    308             printf("file create success~~\n");
    309             readSourceFile(list);
    310         }
    311             break;
    312         case '2':
    313             readSourceFile(list);
    314             Qsort(list,0,MAXSIZE);
    315             printf("操作成功~~\n"); 
    316             break;
    317         case '3':
    318             readSourceFile(list);
    319             bubbleSort(list);
    320             printf("操作成功~~\n");
    321             break;
    322         case '4':
    323             readSourceFile(list);
    324             selectSort(list);
    325             printf("操作成功~~\n");
    326             break;
    327         case '5':
    328             readSourceFile(list);
    329             insertSort(list);
    330             printf("操作成功~~\n");
    331             break;
    332         case '6':
    333             readSourceFile(list);
    334             sheelSort(list);
    335             printf("操作成功~~\n");
    336             break;
    337         case '7':
    338             readSourceFile(list);
    339             mergeSort(&list);
    340             printf("操作成功~~\n");
    341             break;
    342         case '8':
    343             readSourceFile(list);
    344             mergeSort2(&list);
    345             printf("操作成功~~\n");
    346             break;
    347         case '9':
    348             createToFile(list);
    349             printf("操作成功~~\n");
    350             break;
    351         case '#':
    352             
    353             show(list);
    354             break;
    355         default :
    356             printf("输入有误,请重输\n");
    357     }
    358         
    359     }
    360 
    361      return 0;
    362  }
    363  
    友情链接:http://happyrxk.cn
  • 相关阅读:
    列举进程
    数据输出十六进制格式
    double精确度。。。。。
    ip查询详细地址
    通过up2date进行系统升级
    linux系统,安装DVD中所有RPMs包的方法
    修改服务状态
    /etc/sysctl.conf文件
    希望
    RHEL3.9GA virtio 设定方法
  • 原文地址:https://www.cnblogs.com/happyDays/p/2812220.html
Copyright © 2011-2022 走看看