冒泡排序的原理是:從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。
以從小到大排序?yàn)槔,第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)浮到倒數(shù)第二個(gè)位置……就這樣一輪一輪地比較,最后實(shí)現(xiàn)從小到大排序。
代碼如下
#include<stdio.h>
void Bubble_sort(int arr[], int size)
{
int j,i,tem;
for (i = 0; i < size-1;i ++)//size-1是因?yàn)椴挥门c自己比較,所以比的數(shù)就少一個(gè)
{
int count = 0;
for (j = 0; j < size-1 - i; j++) //size-1-i是因?yàn)槊恳惶司蜁?huì)少一個(gè)數(shù)比較
{
if (arr[j] > arr[j+1])//這是升序排法,前一個(gè)數(shù)和后一個(gè)數(shù)比較,如果前數(shù)大則與后一個(gè)數(shù)換位置
{
tem = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tem;
count = 1;
}
}
if (count == 0) //如果某一趟沒(méi)有交換位置,則說(shuō)明已經(jīng)排好序,直接退出循環(huán)
break;
}
}
int main()
{
int arr[10];
int i;
printf("請(qǐng)輸入10個(gè)數(shù)\n");
for (i = 0; i < 10; i++) //接收用戶的數(shù)值
{
scanf("%d", &arr[i]);
}
printf("排序前的數(shù)組>");
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n排序后的數(shù)組>");
Bubble_sort(arr, 10);
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
值得注意的是函數(shù)中的定義的count是為了檢驗(yàn)是否進(jìn)行了元素的交換,是對(duì)代碼的一種優(yōu)化
運(yùn)行結(jié)果>


返回頂部
刷新頁(yè)面
下到頁(yè)底