• 排序


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 
      4 void quickSort(int a[],int left,int right)
      5 {
      6     if(a==NULL||left>=right)
      7         return;
      8 
      9     ////////////////////////////////////
     10     int m=(left+right)/2;
     11     int t;
     12     t=a[m];
     13     a[m]=a[right];
     14     a[right]=a[m];
     15     ///////////////////////////////////////
     16     int i=left,j=right-1,pivot=a[right],tmp;
     17 
     18     while(i<=j)
     19     {
     20         while(a[i]<pivot) i++;
     21         while(a[j]>pivot) j--;
     22         if(i<=j)        // <=
     23         {
     24             tmp=a[i];
     25             a[i]=a[j];
     26             a[j]=tmp;
     27             i++;
     28             j--;
     29         }
     30     }
     31     tmp=a[right];
     32     a[right]=a[i];
     33     a[i]=tmp;
     34 
     35     quickSort(a,left,i-1);
     36     quickSort(a,i+1,right);
     37 }
     38 
     39 
     40 void insertSort(int a[],int n)
     41 {
     42     int i,j,minIndex,tmp;
     43     for(i=0; i<n-1; ++i)
     44     {
     45         minIndex=i;
     46         for(j=i+1; j<n; ++j)
     47         {
     48             if(a[minIndex]>a[j])
     49             {
     50                 minIndex=j;
     51             }
     52         }
     53         tmp=a[i];
     54         a[i]=a[minIndex];
     55         a[minIndex]=tmp;
     56     }
     57 }
     58 
     59 void shellSort(int a[],int n)
     60 {
     61     int k,i,j,tmp;//k是增量(我经常说成是步长)
     62     for(k=n/2; k>=1; k/=2)
     63     {
     64         for(i=k; i<n; ++i)
     65         {
     66             tmp=a[i];
     67             for(j=i-k; j>=0&&a[j]>tmp; j-=k)
     68             {
     69                 a[j+k]=a[j];
     70             }
     71             a[j+k]=tmp;
     72         }
     73     }
     74 }
     75 
     76 void bubbleSort(int a[],int n)
     77 {
     78     //bool flag=false;    //我去,原来C语言里竟然没有bool类型,C++中有
     79     int flag;
     80     int i,j,tmp;
     81     for(i=0; i<n-1; ++i)
     82     {
     83         //flag=false;
     84         flag=0;
     85         for(j=n-1; j>i; --j)
     86         {
     87             if(a[j]<a[j-1])
     88             {
     89                 tmp=a[j];
     90                 a[j]=a[j-1];
     91                 a[j-1]=tmp;
     92                 //flag=true;
     93                 flag=1;
     94             }
     95         }
     96         if(!flag) //本趟没有发生交换,则说明已经有序了
     97             return;
     98     }
     99 }
    100 
    101 //桶排序
    102 void bucketSort(int a[],int n)
    103 {
    104     int b[11]= {0}; //初始化,假设数据范围是1-10
    105     int i,j=0,value;
    106     for(i=0; i<n; ++i)
    107     {
    108         value=a[i];
    109         b[value]++;
    110     }
    111     for(i=0; i<11; ++i)
    112     {
    113         while(b[i]!=0)
    114         {
    115             a[j]=i;
    116             j++;
    117             b[i]--;
    118         }
    119     }
    120 }
    121 
    122 /*void swap(int *a,int *b){
    123     int t;
    124     t=*a;
    125     *a=*b;
    126     *b=t;
    127 }*/
    128 
    129 //归并排序
    130 void mSort(int a[],int tmp[],int left,int right)
    131 {
    132     if(left<right)
    133     {
    134         int mid=(left+right)/2;
    135         mSort(a,tmp,left,mid);
    136         mSort(a,tmp,mid+1,right);
    137         merge(a,tmp,left,mid+1,right);
    138     }
    139 }
    140 void merge(int a[],int tmp[],int lstart,int rstart,int end)
    141 {
    142     int i,j,k;
    143     i=lstart;
    144     j=rstart;
    145     k=lstart;
    146     while(i<=rstart-1&&j<=end)
    147     {
    148         if(a[i]<a[j])
    149         {
    150             tmp[k++]=a[i++];
    151         }
    152         else
    153         {
    154             tmp[k++]=a[j++];
    155         }
    156     }
    157     while(i<=rstart-1)
    158     {
    159         tmp[k++]=a[i++];
    160     }
    161     while(j<=end)
    162     {
    163         tmp[k++]=a[j++];
    164     }
    165 
    166     //把数据从临时数组中拷贝到原始数组中
    167     for(i=lstart; i<=end; ++i)
    168     {
    169         a[i]=tmp[i];
    170     }
    171 }
    172 void mergeSort(int a[],int n)
    173 {
    174     int *tmp;
    175     tmp=malloc(n*sizeof(int));
    176     if(tmp!=NULL)
    177     {
    178         mSort(a,tmp,0,n-1);
    179         free(tmp);
    180     }
    181 }
    182 
    183 
    184 int main()
    185 {
    186     int a[]= {6,2,7,1,1,1,5};
    187     int i,n=sizeof(a)/sizeof(int);
    188     //quickSort(a,0,n-1);
    189     //insertSort(a,n);
    190     //bubbleSort(a,n);
    191     //bucketSort(a,n);
    192     mergeSort(a,n);
    193     for(i=0; i<n; i++)
    194     {
    195         printf("%d	",a[i]);
    196     }
    197 
    198     /*int b[]={0,1};
    199     swap(&b[0],&b[1]);
    200     printf("
    %d%d",b[0],b[1]);*/
    201     return 0;
    202 }
  • 相关阅读:
    正则表达式$的一些用法
    基本类型数据转换(int,char,byte)
    IntelliJ Idea 2017 免费激活方法
    jrebel license server 激活方法
    linux 完全关闭tomcat
    spring data jpa自定义bean字段映射
    idea 启动调试模式总提示端口58346被占用问题
    java使用jsch连接linux
    福大软工 · BETA 版冲刺前准备(团队)
    Alpha 事后诸葛亮
  • 原文地址:https://www.cnblogs.com/crane-practice/p/3938247.html
Copyright © 2020-2023  润新知