C語言詳解冒泡排序實現(xiàn)
前言
在排序中,有各種各樣的排序方式,今天我們將要來介紹《冒泡排序》。今天會從冒泡排序的具體意義和他的操作來展開。
一、冒泡排序是什么
從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數(shù)就會從序列的最右邊冒出來。
以從小到大排序為例,第一輪比較后,所有數(shù)中最大的那個數(shù)就會浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個數(shù)就會浮到倒數(shù)第二個位置……就這樣一輪一輪地比較,最后實現(xiàn)從小到大排序。
二、具體步驟
1.代碼解釋
代碼如下(示例):
#include<stdio.h>
void bubble(int arr[], int sz)
{
for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個數(shù))
//n個數(shù)的話,就要走n-1趟(每一趟排完以后,都
//要減去最后一個排好的數(shù))
{
int flag = 0;
for (int i = 0; i < sz-1-j; i++)
{
if (arr[i] <arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
int main()
{
int arr[] = { 要排序的元素 };
int sz = sizeof(arr) / sizeof(arr[0]); // sz為數(shù)組元素個數(shù)。
bubble(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}舉例詳細說明:


同理可得,每一趟以后減去一個元素,則每趟需要減去一次次數(shù)。

所以for循環(huán)中,需要i<sz-1-j.

當遇到規(guī)范的數(shù)組元素時(不需要排序),int flag =0初始為零,若需要排序,則進入 if (arr[i] <arr[i + 1])循環(huán)中,則flag變?yōu)?;若一趟過完之后,發(fā)現(xiàn)并未交換元素,則flag=0未變,直接跳出循環(huán),減少了時間復雜度。
2.讀入數(shù)據(jù)
代碼如下(示例)
#include<stdio.h>
void bubble(int arr[], int sz)
{
for (int j = 0; j < sz - 1; j++) //一趟排n-1次(n為n個數(shù))
//n個數(shù)的話,就要走n-1趟(每一趟排完以后,都
//要減去最后一個排好的數(shù))
{
int flag = 0;
for (int i = 0; i < sz-1-j; i++)
{
if (arr[i] <arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
int main()
{
int arr[] = { 1,3,54,76,7,5,45,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}那么可以看出,輸出的結果就是
76,54,45,9,7,5,3,1
總結
這里對文章進行總結:
從大到小,和從小打大至于要改變if (arr[i] <arr[i + 1])中符號即可。
注意:在調(diào)用函數(shù)時,在函數(shù)內(nèi)部無法算出sz,即數(shù)組的元素個數(shù),所以需在主函數(shù)中算出后,再傳入函數(shù)形參中??!
到此這篇關于C語言詳解冒泡排序實現(xiàn)思路的文章就介紹到這了,更多相關C語言 冒泡排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學習筆記
這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學習筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10

