<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        快速排序與二分查找程序

        作者:劉蕊飛   來源:本站原創   點擊數:  更新時間:2014年03月02日   【字體:

        快排和二分查找的原理就不說了,網上一搜一大堆,這里主要是自己編寫的快排、二分與系統自帶的快排、二分代碼,一般面試都會出冒泡,所以冒泡是才是最重要的。系統自帶的快排函數在編寫代碼的時候用著挺方便的,代碼如下:

         

        // 快速排序

         

        #include <stdio.h>

         

        void q_sort(int arr[],int low,int high);

         

        int main()

         

        {

         

               intarr[10] = {0};

         

               inti = 0;

         

         

         

               printf("輸入 10 個整數:\n");

         

               for(i= 0;i < 10;i++)

         

                      scanf("%d",&arr[i]);

         

               q_sort(arr,0,9);

         

               for(i= 0;i < 10;i++)

         

                      printf("%d",arr[i]);

         

               printf("\n");

         

         

         

               return0;

         

        }

         

        void q_sort(int arr[],int low,int high)

         

        {

         

               inti = 0,j = 0; //i- j-

         

               intbase = 0;           // 基數

         

               inttemp = 0;

         

         

         

               if(low>= high)             // 遞歸終止

         

                      return;

         

               i= low;

         

               j= high;

         

               base= arr[low];

         

               while(i< j){

         

                      while(arr[j]> base)// ->

         

                             j--;

         

                      temp= arr[j];

         

                      arr[j]= arr[i];

         

                      arr[i]= temp;

         

                      while(arr[i]< base)// ->

         

                             i++;

         

                      temp= arr[j];

         

                      arr[j]= arr[i];

         

                      arr[i]= temp;

         

                      if(i<j&& arr[i]==arr[j])

         

                             j--;

         

               }    

         

               q_sort(arr,low,i-1);

         

               q_sort(arr,i+1,high);

         

        }

         

         

         

        /***************************************

         

        auth:肖喬

         

        func:二分查找

         

        ***************************************/

         

        #include<stdio.h>

         

        #define N 5

         

         

         

        int main(){

         

               inti,j,a[N],t;

         

               inthig,low,mid,k;

         

         

         

               printf("請輸入%d個整數:",N);

         

               for(j=0;j<=N-1;j++){

         

                      scanf("%d",&a[j]);

         

               }

         

         

         

               for(i=0;i<N-1;i++)

         

                      for(j=0;j<N-1-i;j++)

         

                             if(a[j]>a[j+1]){

         

                                    t=a[j];a[j]=a[j+1];a[j+1]=t;

         

                             }

         

         

         

               printf("從小到大排列:");

         

               for(j=0;j<=N-1;j++)

         

                      printf("%d",a[j]);

         

               printf("\n");

         

        #if 1

         

               printf("請輸入要查找的數:");

         

               scanf("%d",&k);

         

               low=0;hig=N-1;

         

               while(low<=hig){

         

                      mid=(low+hig)/2;

         

                      if(a[mid]==k){

         

                             printf("%d在數組中第%d\n",a[mid],mid+1);

         

                             break;

         

                             }

         

                      elseif(a[mid]<k)

         

                             low=mid+1;

         

                      else        

         

                             hig=mid-1;

         

               }

         

        #endif

         

               return0;

         

        }

         

         

         

        下面是系統自帶快排和二分查找的函數。qsortbsearch兩個函數可以配合起來用,先排序,在查找,也可以分開使用。qsort在比較兩個數大小的時候返回3個值,1、-1、0,改變1-1的位置,就可以實現從大到小和從小到大排序。

         

         

         

        qsort

         

        功能:對數組basenmemb塊大小為size字節的數組快速排序。

         

        參數:base 開始地址,nmenmb 數據塊數 size 地址大小 compare 根據此指針指向的函數的返回結果來排序(0,正數和負數)

         

        返回值:無

         

         

         

        bsearch

         

        功能:從地址base 開始空間的nmenmb塊大小為size字節的數據中,二分查找key指針保存地址空間中的內容

         

        參數:key查找內容的首地址base開始地址nmenmb

         

         

         

        //qsort 函數的使用

         

        //bseach函數使用

         

        #include<stdio.h>

         

        #include<stdlib.h>

         

        int c_desc(const void *px,const void *py);

         

        //int c_asc(const void *px,const void *py);

         

         

         

        int main(){

         

               intarr[10]={0};

         

               inti=0,j=0,data=0;

         

               int*p=&j;

         

               printf("輸入十個數:");

         

               for(i=0;i<10;i++)

         

                      scanf("%d",&arr[i]);

         

               printf("輸入查找的數:");

         

               scanf("%d",&data);

         

               printf("升序排列:\n");

         

               qsort(arr,10,sizeof(int),c_desc);

         

               for(i=0;i<10;i++)

         

                      printf("%d",arr[i]);

         

               printf("\n");

         

        //     printf("降序排列:\n");

         

        //     qsort(arr,10,sizeof(int),c_asc);

         

        //     for(i=0;i<10;i++)

         

        //            printf("%d",arr[i]);

         

               p=bsearch(&data,arr,10,sizeof(int),c_desc);

         

               if(p==NULL)

         

                      printf("不存在");

         

               else{

         

                      printf("存在\n");

         

                      printf("%d在第%d個位置",data,p-arr+1);

         

               }

         

         

         

         

         

               printf("\n");

         

               return0;

         

        }

         

         

         

        int c_desc(const void *px,const void *py){

         

               const*p1=px;

         

               const*p2=py;

         

         

         

               if(*p1==*p2)

         

                      return0;

         

               elseif(*p1>*p2)

         

                      return1;

         

               else

         

                      return-1;

         

        }

         

         

         

        #if 0

         

        int c_asc(const void *px,const void *py){

         

               const*p1=px;

         

               const*p2=py;

         

         

         

               if(*p1==*p2)

         

                      return0;

         

               elseif(*p1>*p2)

         

                      return-1;

         

               else

         

                      return1;

         

        }

         

        #endif

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮