常用排序演算法集合-C實現

來源:互聯網
上載者:User

標籤:

之前熟悉C的時候寫著玩的,就當做筆記用吧:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define MAX 8void print_r(int *arr,int len);static void usage(void){    printf("-s            selection sort\n"           "-b            show unsorted status\n"           "-m            merge sort\n"           "-i            insertion sort\n"           "-I            Information\n"           "-h            help and exit\n");    return;}static void usage_info(void){    printf("這是一個排序演算法的測試程式\n"           "目前包括選擇排序,插入排序和合并排序\n");    return;}int* create_arr(int *arr){    srand(time(NULL));    int i;    for(i=0;i<MAX;i++)    {        arr[i]=rand()%100;    }    return arr;}void insertion_sort(int arr[]){    int temp = 0,j = 0,i = 0;    for(j = 1;j<MAX;j++)    {        i = j-1;        temp = arr[j];        while(i >= 0 && arr[i] < temp)        {            arr[i+1] = arr[i];            i--;        }        arr[i+1] = temp;    }}void selection_sort(int arr[],int len){    int i,j=0,index,key;    for(i=0;i < len;i++)    {        key = arr[i];        index = i;        j = i+1;        while(j < len)        {            if(arr[j] < key)            {                key = arr[j];                index = j;            }            j++;        }        arr[index] = arr[i];        arr[i] = key;    }    }/** * start 數組開始下標 * mid   數組分割下標 * end   數組結束下標 */void merge(int arr[],int start,int mid,int end){    int szie_L,szie_R,i,j,k;    szie_L = mid+1-start; //左數組大小    szie_R = end-mid;     //右數組大小    int arr_L[szie_L],arr_R[szie_R];    for(i = 0;i < szie_L;i++)    {        arr_L[i] = arr[start+i];    }    for(j = 0;j < szie_R;j++)    {        arr_R[j] = arr[mid+j+1];    }    i = 0;    j = 0;    for(k = start;k <= end;k++)    {        if((i < szie_L) && (j < szie_R))        {            if(arr_L[i] <= arr_R[j])            {                arr[k] = arr_L[i];                i++;            }            else if(arr_L[i] > arr_R[j])            {                arr[k] = arr_R[j];                j++;            }         }        else if(j >= szie_R)        {            arr[k] = arr_L[i];            i++;        }        else        {            arr[k] = arr_R[j];            j++;        }    }}/** * start 數組開始下標 * end 數組結束下標 */void merge_sort(int arr[],int start,int end){    int mid; //用來分割數組的下標    if(start < end)    {        mid = (int)((start+end)/2);        merge_sort(arr,start,mid);        merge_sort(arr,mid+1,end);        merge(arr,start,mid,end);    }}void print_r(int *arr,int len){    int i;    for(i=0;i<len;i++)    {        printf("[%d]=>%d\n",i,arr[i]);    }}void main(int argc ,char **argv){    int i,c,sorted=0;    int arr[MAX];    create_arr(arr);    if(argc>1)    {        while(-1 != (c = getopt(argc,argv,"hsimIb")))        {            switch(c)            {                case ‘b‘:                          printf("before sorting : \n");                          print_r(arr,MAX);                          printf("=========================================\n");                          break;                case ‘h‘:                          usage();                          break;                case ‘s‘:                          selection_sort(arr,MAX);                          printf("selection sorting : \n");                          sorted = 1;                          break;                case ‘i‘:                          insertion_sort(arr);                          printf("insertion sorting : \n");                          sorted = 1;                          break;                case ‘m‘:                          merge_sort(arr,0,MAX-1);                          printf("merge sorting : \n");                          sorted = 1;                          break;                case ‘I‘:                          usage_info();                          break;                default : usage();                          break;            }        }        if(sorted)        {            print_r(arr,MAX);        }    }    else    {        usage();        exit(0);    }}

 

常用排序演算法集合-C實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.