c語言數組排序方法
① c語言如何將一個數組中的數值排好順序
使用冒泡排序法進行編程:
解釋:
1.第一個for循環:利用數組循環輸入4個變數。
2.第二個for循環:該循環的意思是如果a[0]>a[1]的話,兩個變數的值交換,利用循環依次比較。要注意的是i<3,因為其中有i+1,i最大取到2,也就是i+1最大取到3才正確。
3.第三個for循環:利用循環依次輸出排序後的數組,每輸出一個加一個空格以便於區分。
(1)c語言數組排序方法擴展閱讀:
冒泡排序法,從數組頭部開始,不斷比較相鄰的兩廳笑個元素的大小,通過交換兩個元素的值使較大的元素逐漸銀物往後移動,扮搏含直到數組的末尾。
經過第一輪的比較,就可以找到最大的元素,並將它移動到最後一個位置。第一輪結束後,繼續第二輪。仍然從數組頭部開始比較,讓較大的元素逐漸往後移動,直到數組的倒數第二個元素為止。
經過第二輪的比較,就可以找到次大的元素,並將它放到倒數第二個位置。
以此類推,進行 n-1(n 為數組長度)輪「冒泡」後,就可以將所有的元素都排列好。
② c語言考試。問數組,常見的數組排序演算法有那幾種選擇一個描述過程。
有插入排序:直接插入排序、折半插入排序、希爾排序;交換排序:冒泡排序、快速排序;選擇排序:簡單選擇排序、堆排序;歸並排序;基數排序。
常用冒泡排序的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面(數組由小到大排序)。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後,此時第一趟結束,在最後的數必是所有數中的最大數。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到最大數前的一對相鄰數,將小數放前,大數放後,第二趟結束,在倒數第二個數中得到一個新的最大數。如此下去,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
用二重循環實現,外循環變數設為i,內循環變數設為j。外循環重復9次,內循環依次重復9,8,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,9,對於每一個i, j的值依次為1,2,...10-i。
代碼:
for(i=0; i<NUM-1; i++) /*外循環:控制比較趟數*/
for(j=NUM-1; j>i; j--) /*內循環:進行每趟比較*/
if(data[j]<data[j-1]) /*如果data[j]大於data[j-1],交換兩者的位置*/
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};
③ c語言一維數組冒泡排序
如果遇到相等的值不進行交換,那這種排序方式是穩定的排序方式。 原理:比較兩個相鄰的元素,將值大的元素交換到右邊 思路:依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在後面。 (1)第一次比較:首先比較第一和第二個數,將小數放在前面,將大數放在後面。 (2)比較第2和第3個數,將小數 放在前面,大數放在後面。 ...... (3)如此繼續,知道比較到最後的兩個數,將小數放在前面,大數放在後面,重復步驟,直至全部排序完成 (4)在上面一趟比較完成後,最後一個數一定是數組中最大的一個數,所以在比較第二趟的時候,最後一個數是不參加比較的。 (5)在第二趟比較完成後,倒數第二個數也一定是數組中倒數第二大數,所以在第三趟的比較中,最後兩個數是不參與比較的。 (6)依次類推,每一趟比較次數減少依次比上一趟減少一次。 演算法分析: (1)由此可見:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數 (2)冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了演算法的量。 (3)時間復雜度 1.如果我們的數據正序,只需要走一趟即可完成排序。所需的比較次數C和記錄移動次數M均達到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的時間復雜度為O(n)。 2.如果很不幸我們的數據是反序的,則需要進行n-1趟排序。每趟排序要進行n-i次比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值: 綜上所述:冒泡排序總的平均時間復雜度為:O(n2) ,時間復雜度和數據狀況無關。 void BubbleSort(int a[], int len) { int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } } }