C語言一維陣列排序問題(一)

2021-09-25 02:14:53 字數 2765 閱讀 2312

基本思路:每次將相鄰兩個數比較,將小的(大的)調到前邊。如圖:

第一趟後最大(最小)數 「沉底」,然後進行第二趟,第三趟。。。

如果有n個數,則要進行n-1趟比較,在第一趟中進行n-1次兩兩比較,在第j趟中進行n-j次兩兩比較。

**實現:

#include int main()

printf("排序後的順序是:\n");

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

printf("%5d",a[i]); //將氣泡排序後的順序輸出

printf("\n");

return 0;

}

請輸入10個數:

66 32 23 45 25 5 15 69 46 37

排序後的順序是:

5   15   23   25   32   37   45   46   66   69

思路:選擇排序的基本演算法是從待排序的區間中經過選擇和交換後選出最小的數值存放到 a[0] 中,再從剩餘的未排序區間中經過選擇和交換後選出最小的數值存放到 a[1] 中,a[1] 中的數字僅大於 a[0],依此類推,即可實現排序。

程式中用到兩個 for 迴圈語句。第乙個 for 迴圈是確定位置的,該位置是存放每次從待排序數列中經選擇和交換後所選出的最小數。第二個 for 迴圈是實現將確定位置上的數與後面待排序區間中的數進行比較的。

#include int main()

printf("排序後的順序是:\n");

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

printf("%5d", a[i]); //輸出排序後的陣列

printf("\n");

return 0;

}

請輸入10個數:

526 36 2 369 56 45 78 92 125 52

排序後的順序是:

2   36   45   52   56   78   92  125  369  526

思路:快速排序是氣泡排序的一種改進,主要的演算法思想是在待排序的 n 個資料中取第乙個資料作為基準值,將所有記錄分為 3 組,使第一組中各資料值均小於或等於基準值,第二組做基準值的數琚,第三組中各資料值均大於或等於基準值。這便實現了第一趟分割,然後再對第二組和第蘭組分別重複上述方法,依次類推,直到每組中只有乙個記錄為止。

#include int qusort(int s,int start,int end)    //自定義函式 qusort()快速排序

{ int i,j;

i=start; //將每組首個元素賦給i

j = end; //將每組末尾元素賦給j

s[0]=s[start]; //設定基準值

while(i請輸入10個數:

99 45 12 36 69 22 62 796 4 696

排序後的順序是:

4   12   22   36   45   62   69   99  696  796

插入排序是把乙個記錄插入到已排序的有序序列中,使整個序列在插入該記錄後仍然有序。插入排序中較簡單的種方法是直接插入排序,其插入位置的確定方法是將待插入的記錄與有序區中的各記錄自右向左依次比較其關鍵字值的大小。本例項要求使用直接插入排序法將數字由小到大進行排序。

原始順序:25 12 36 45 2 9 39 27 98 37

表1 直接插入排序過程 趟數

監視哨排序結果125

(12,)25,36,45,2,9,39,22,98,37212

(12,25,)36,45,2,9,39,22,98,37336

(12,25,36,)45,2,9,39,22,98,37445

(12,25,36,45,)2,9,39,22,98,3752

(2,12,25,36,45,)9,39,22,98,3769

(2,9,12,25,36,45,)39,22,98,37739

(2,9,12,25,36,39,45,)22,98,37822

(2,9,12,22,25,36,39,45,)98,37998

(2,9,12,22,25,36,39,45,98,)37

1037

(2,9,12,22,25,36,37,39,45,98,)

本演算法中使用了監視哨,主要是為了避免資料在後移時丟失

#include int insort(int s, int n) /* 自定義函式 insort()*/

{ int i,j;

for(i=2;i<=n;i++) //陣列下標從2開始,s[0]做監視哨,s[1]乙個資料無可比性

{s[0]=s[i]; //給監視哨陚值

j=i-1; //確定要比較元素的最右邊位置

while(s[0]請輸入10個資料:

25 12 36 45 2 9 39 22 98 37

原始順序:

25   12   36   45    2    9   39   22   98   37

插入資料排序後順序:

2    9   12   22   25   36   37   39   45   98

C語言 一維陣列

1 陣列用來代表記憶體裡一組連續的同型別儲存區,這些儲存區叫做陣列的元素 2 陣列也需要先宣告然後才能使用 3 宣告陣列時也需要提供型別名稱和陣列命令,另外還需要提供乙個整數用來表示陣列裡,的儲存區個數 4 陣列一旦存在則裡面儲存區的個數就不可以改變了 5 陣列通常不會作為整體使用,一般一次只使用其...

C語言 一維陣列

一維陣列 int a 10 一維陣列名a是乙個指標常量,而不是指標變數。你不能修改常量的值 在幾乎所有使用陣列名的表示式中,陣列名的值是乙個指標常量,也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果他們是int型別,那麼陣列名的型別就是 指向int的常量指標 如果他們是其他型別,那麼陣...

C語言一維陣列

1.2一維陣列的初始化 一維陣列用以儲存一位數列中資料的集合。其一般形式如下 型別說明符陣列說明符 常量表示式 型別說明符表示陣列中所用元素的型別 陣列識別符號 表示該陣列中變數的名稱,命名規則與變數名一致 常量表示式定義了陣列中存放的資料元素的個數,既陣列長度。例如 定義乙個陣列 int a 10...