C 冒泡排序和選擇排序


 

冒泡排序


  

      理論概念: 從第一個數開始,將相鄰的兩個數比較,第一個數和第二個數比較,比如說是從小到大的排序,要是后面的數比前面的小則交換兩個的位置,這樣第一輪比較基數后最大的數就到了最后面,接着進行第二輪的比較,比較到前面N-1個數,原理也是前面的那樣,大的往后面不停的排,直到比較到前面只剩下一個數的時候,就完成了排序,這就是冒泡的原理:

      第一層循環控制的是我們需要比較多少輪,每比較一輪我們的第二層就少比較一個值,因為最值已經被設置到最前面或者最后面。

      第二層循環控制的就是兩個相鄰的數的比較,但由於前面說的每比較一輪我們的第二層就少比較一個值,所以這個循環控制比較的個數和第一輪是有關系的,這樣就好理解for循環邊界值的問題。

冒泡排序的代碼:

#include "stdio.h"
#define N 10

int main(){

      int a[N];
      int i,j,t;
      printf("請輸入您要排序的%d 數字\n",N);

      /*輸入十個數*/
      for(i=0;i<N;i++)
      scanf("%d",&a[i]);
      /*冒泡*/
      for(j=0;j<N-1;j++){

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

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

               t = a[i];
               a[i] = a[i+1];
               a[i+1] = t; 
           }
        } 
     }
     printf("排序的結果是:");
     for(i=0;i<N;i++){

        printf("%d ",a[i]);
     }
}

 

下面是寫的過程中出現的錯誤分析:

 

 

選擇排序 


 

      理論概念:選擇排序,就像是打擂台一樣,我們先選第一個位置的數為基准位置,后面的一個一個挑戰,(比如我們從小到大排序),要是第二個數比第一個數小,則更換值(這時候值換了,但擂主的標記位置還是第一個)再比較第三個,要是比第一個又小,再換,直到一輪比賽結束,找到最小的在前面,接着我們開始第二輪,第二輪以第二個數為基准。后面的還是按照前面的邏輯比較,直到最后一個數,這樣就整個排序過程出來了。

      第一層循環控制的就是我們設置的擂主的標記,這里只設置一直比較到倒數第二個即可。

      第二層就是后面一個個挑戰的選手,要是一旦發現符合比較條件的,就交換他們的值,在接着和后面比較。

 

快速排序的代碼:

#include "stdio.h"
#define N 10
int main( ){

   int i,j,t,k;
   int a[N];

    printf("請輸入你要排序的%d個整數",N);

   for(i=0;i<N;i++)
      scanf("%d",&a[i]);

   /*注意這里不能寫成N 不然下面的 j 會越界*/
   for(i=0;i<N-1;i++){

      k=i;
      for(j=i+1;j<N;j++){
         if(a[k]>a[j])  k=j;
      }
      if(k!=i){

         t= a[i];
         a[i] = a[k];
         a[k] = t;
      }
   }

  printf("最終排序的結果是:");
     for(i=0;i<N;i++)
      printf("%d ",a[i]);
}

 

上面就OK,這里沒有什么錯,最后看一下結果:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM