您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么用C語言實現冒泡排序”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
原理:
以 6 個數為例: 對 4 56 25 13 8 6 進行冒泡排序(1 與 2、 2 與3 、 3 與4 、4 與 5 、 5 與 6 比較, 即依次比較)
第一輪:
No.1:56 4 25 13 8 6
No.2:56 25 4 13 8 6
No.3:56 25 13 4 8 6
No.4:56 25 13 8 4 6
No.5:56 25 13 8 6 4 (最小)
通過第一輪可以看出通過 5 次比較可以找出來一個最小的數。
第二輪:
No.1:56 25 13 8 6
No.2:56 25 13 8 6
No.3:56 25 13 8 6
No.4:56 25 13 8 6 (最小)
由此可見,第二輪經過4次比較確定最小的一個數。
..................................
以下就不一 一比較,可以推理的是,每一輪確定一個最小值,那么6個數,需要5輪比較方能確定順序。若n個數,則需要比較n - 1 輪才能確定數的順序。
還可以推出,第一輪需要比較 5 次, 第二輪需要比較 4次,那么若有n個數,則第一輪需要比較n - 1次, 第二輪 比較 n - 2次。
重點:若用 i 表示第 i 輪, j 表示每輪比較 j 次,那么循環應該這么設計;
for ( i = 0 ; i < n - 1 ; i ++ )
{
for(j = 0 ; j < n - 1 - i ; j ++)
{
...............;
...............;
...............;
}
}
下面用一個簡單的實際例子說明:
用c編寫一個程序,從鍵盤讀取10 個數字,對其用冒泡排序法進行排序;
程序:
/*
2017年10月27日17:31:59
功能:輸入10個數,通過冒泡法對其進行排序。
*/
#include<stdio.h>
#include<stdlib.h>
#define NUM 10
int main()
{
int num = NUM;
int array[NUM];
int i, j;
int temp;
printf("Please enter %d integer numbers:", num);
for(i = 0; i < NUM; i ++)
{
scanf("%d", &array[i]);
}
//sort
for(i = 0; i < NUM - 1; i ++)
{
for(j = 0; j < NUM - 1 - i; j ++)
{
if(array[j] < array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
printf("The numbers after being sorted:\n");
for(i = 0; i < NUM; i ++)
{
printf("%d\t", array[i]);
if( (i + 1) % 5 == 0 ) //每行5個數字
{
printf("\n");
}
}
return 0;
}
/*
在Code::Blocks中的輸出結果為:
Please enter 10 integer numbers:12 25 65 32 24 59 85 64 49 5
The numbers after being sorted:
85 65 64 59 49
32 25 24 12 5
2017年10月27日17:49:05
心得:冒泡排序的發明者一定智商很高,第一次提出對智力很是挑戰。總之,要想明白冒泡排序的算法,必須明白其原理才行。
*/
上面的例子是用一個數組來存放10個數字。用最簡單的編程方法去實現了冒泡排序,并沒有用指針,以及動態地開辟內存空間去編寫這個程序。一是覺得生
澀難懂;二是不一定能編地出來。
“怎么用C語言實現冒泡排序”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。