<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            C語言中三種常見排序算法分析

            時間:2025-11-25 22:31:28 C語言 我要投稿

            C語言中三種常見排序算法分析

              C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。那么C語言中三種常見排序算法的分析情況是怎樣的呢。以下僅供參考!

              一、冒泡法(起泡法)

              算法要求:用起泡法對10個整數按升序排序。

              算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往后,經過一趟比較后,將最值沉底(換到最后一個元素位置),最大值沉底為升序,最小值沉底為降序。

              算法源代碼:

              # include

              main()

              {

              int a[10],i,j,t;

              printf("Please input 10 numbers: ");

              /*輸入源數據*/

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

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

              /*排序*/

              for(j=0;j<9;j++) /*外循環控制排序趟數,n個數排n-1趟*/

              for(i=0;i<9-j;i++) /*內循環每趟比較的次數,第j趟比較n-j次*/

              if(a[i]>a[i+1]) /*相鄰元素比較,逆序則交換*/

              { t=a[i];

              a[i]=a[i+1];

              a[i+1]=t;

              }

              /*輸出排序結果*/

              printf("The sorted numbers: ");

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

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

              printf(" ");

              }

              算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定一個數在結果的位置,確定元素位置的順序是從后往前,其余元素可能作相對位置的調整。可以進行升序或降序排序。

              算法分析:定義n-1次循環,每個數字比較n-j次,比較前一個數和后一個數的大小。然后交換順序。

              二、選擇法

              算法要求:用選擇法對10個整數按降序排序。

              算法分析:每趟選出一個最值和無序序列的第一個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然后將最值和i+1至最后一個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。

              算法源代碼:

              # include

              main()

              {

              int a[10],i,j,k,t,n=10;

              printf("Please input 10 numbers:");

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

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

              for(i=0;i<n-1;i++) /*外循環控制趟數,n個數選n-1趟*/

              {

              k=i; /*假設當前趟的第一個數為最值,記在k中 */

              for(j=i+1;j<n;j++) /*從下一個數到最后一個數之間找最值*/

              if(a[k]<a[j]) /*若其后有比最值更大的*/

              k=j; /*則將其下標記在k中*/

              if(k!=i) /*若k不為最初的i值,說明在其后找到比其更大的數*/

              { t=a[k]; a[k]=a[i]; a[i]=t; }/*則交換最值和當前序列的第一個數*/

              }

              printf("The sorted numbers: ");

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

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

              printf(" ");

              }

              算法特點:每趟是選出一個最值確定其在結果序列中的位置,確定元素的位置是從前往后,而每趟最多進行一次交換,其余元素的相對位置不變。可進行降序排序或升序排序。

              算法分析:定義外部n-1次循環,假設第一個為最值,放在參數中,在從下一個數以后找最值若后面有比前面假設的最值更大的就放在k中,然后在對k進行分析。若k部位最初的i值。也就是假設的i不是最值,那么就交換最值和當前序列的第一個數

              三、插入法

              算法要求:用插入排序法對10個整數進行降序排序。

              算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數,其余n-1個數組成無序序列,則n個數需進n-1次插入。尋找在有序序列中插入位置可以從有序序列的最后一個數往前找,在未找到插入點之前可以同時向后移動元素,為插入元素準備空間。

              算法源代碼:

              # include

              main()

              {

              int a[10],i,j,t;

              printf("Please input 10 numbers: ");

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

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

              for(i=1;i<10;i++)/*外循環控制趟數,n個數從第2個數開始到最后共進行n-1次插入*/

              {

              t=a[i]; /*將待插入數暫存于變量t中*/

              for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標0 ~ i-1)中尋找插入位置*/

              a[j+1]=a[j]; /*若未找到插入位置,則當前元素后移一個位置*/

              a[j+1]=t; /*找到插入位置,完成插入*/

              }

              printf("The sorted numbers: ");

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

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

              printf(" ");

              }

              算法特點:每趟從無序序列中取出第一個數插入到有序序列的合適位置,元素的最終位置在最后一趟插入后才能確定位置。也可是先用循環查找插入位置(可從前往后或從后往前),再將插入位置之后的元素(有序列中)逐個后移一個位置,最后完成插入。該算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從后往前,則可將兩個操作結合在一起完成,提高算法效率。仍可進行升序或降序排序。

              幾種排序的概念

              1、冒泡排序

              算法思想簡單描述:

              在要排序的一組數中,對當前還未排好序的范圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。

              下面是一種改進的冒泡算法,它記錄了每一遍掃描后最后下沉數的位置k,這樣可以減少外層循環掃描的次數。

              冒泡排序是穩定的。算法時間復雜度O(n2)–[n的平方]

              2、選擇排序

              算法思想簡單描述:

              在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。

              選擇排序是不穩定的。算法復雜度O(n2)–[n的平方]

              3、直接插入排序

              算法思想簡單描述:

              在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反復循環,直到全部排好順序。

              直接插入排序是穩定的。算法時間復雜度O(n2)–[n的平方]

            【C語言中三種常見排序算法分析】相關文章:

            6種常見的排序算法的C語言實現10-25

            c語言的排序算法01-15

            常用的兩種C語言排序算法07-16

            C語言奇偶排序算法02-15

            c語言排序的幾種算法12-04

            JAVA語言的常見排序算法11-24

            C語言冒泡排序算法實例12-19

            C語言快速排序算法及代碼11-01

            C語言實現歸并排序算法實例分析01-25

            • 相關推薦

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院