c语言数据交换的算法流程图,C语言冒泡排序算法浅析
C語言泡排冒序算淺析
法中劉旭 (
江師范麗等專高學(xué)科校數(shù)與計算機學(xué)科學(xué)系 )
【
摘】要泡冒排序算法 C語言常見是排序算法之,一該算法的優(yōu)點
邏輯是清晰,代碼簡潔,點缺是時復(fù)雜度間高較本文介。紹了統(tǒng)傳
0
。每一輪較結(jié)束后比,如標(biāo)果識量變的值為 l,則說明有發(fā)沒生
數(shù)據(jù)換交,排序已完經(jīng)成,不用繼續(xù)再比較;如果標(biāo)變量識的為值0,
冒泡排序算
法的基思本想,并算對的改法進(jìn)行分進(jìn)析,已降該低
法算的時間復(fù)雜度。
說則排明可序未能成,完需進(jìn)還下一行的比較輪改進(jìn)后的。算如法下
: u i。d b ub b l P
一
5rI
—。
be tt e r (in t a[】。i n t n)I I為數(shù)na組元的素個數(shù)
【
鍵關(guān)字】 c語言,法,冒算排泡
序 1.引言
’
f
0r i(咄 i (n -1 i;+ .】
Fla=1g/;/置標(biāo)識設(shè)變薰并賦值為1 F
o (r j= 0;< j一 n1一i;j+ ’){
在
c語言的習(xí)學(xué)中,學(xué)習(xí)完程在設(shè)計序結(jié)以后,構(gòu)就會遇到 于排序關(guān)的問題。常見的排序算有法冒泡序排選、排序擇、插入排序、快排速和歸序排序并等排序法算本文。主要對統(tǒng)傳冒的排序泡法算的算邏輯法和算法實現(xiàn)等進(jìn)分析,對行傳統(tǒng)法算不中必要的循環(huán)進(jìn)行了進(jìn)改,一在程度定減了算少法循的環(huán)次數(shù)數(shù)據(jù)和交換次 ,數(shù)從而降了算法的低間時雜度復(fù)。 2傳.統(tǒng)的冒排序泡算法
i F([ a】> j【aj + l】 )
{
F l a g=日;,,在數(shù)據(jù)變存,標(biāo)換變量識賦值日
為te pI; a j【】; a【 1 j a【 j+ 1 】 a【 J+ 1;】 tem p:
}
“} l a g= =
;1
’; 藁榘裾雜魯 藜譬數(shù) 交據(jù)換排,序已完成
泡排冒序法算對兩相個的數(shù)鄰進(jìn)行比較,小較的數(shù)“浮”上較, 3 . 每2一輪比較找到當(dāng)前最大的數(shù),時同時 找當(dāng)?shù)角暗淖钚〈蟮臄?shù)“下沉”,對參 比較加的 兩相個鄰的數(shù)據(jù)而言, 果如前一個 數(shù)比數(shù)后一個大,則數(shù)交換這個兩;數(shù)則不用否換交對每一對。相的鄰以的兩上個算法中,在 一每輪相的鄰兩數(shù)比較 時,都是 第從一兩個數(shù)進(jìn)行完次比一后較,最后一個的就數(shù)是最的大數(shù),接下來對相對鄰數(shù)兩
中找到較大數(shù),每輪比一較找到只當(dāng)前比范圍的較最除去最一后個數(shù)其的他數(shù)再次進(jìn)每一行對相鄰的兩數(shù)個的較比,數(shù)。如大果同能時找當(dāng)前到較比圍范的最數(shù),小率可效以高提一最的后數(shù)是第便二的大數(shù)如果有。n個元素數(shù)組的[ a]:n ,倍循環(huán)數(shù)也可次以大幅減,少相于當(dāng)在同輪的比較中一,到找一 第一輪逐,個比較 ( [ a1],a[ 2 )], ( [a2] , a[3] ),( a[3], a[ 4] , )個最大‘下沉 到最”后,同時 到找一個最小“數(shù)浮上”到最前面。具( a[n— i] a, n] )[最:大 元的素被會移動到 aI ] n上第二。,輪逐體法為:方在找到當(dāng)輪前比較的大數(shù)最后,在進(jìn)行下一比輪較之個比 ( a較[1] a,[ 2]) ( a,[ 2],a []3), ( a[ 3], a[ 4 )],…,… (a [ n 2], a前從當(dāng),輪排前序圍范最的后一對鄰相的兩開始數(shù)行相進(jìn)鄰數(shù)兩[n一 1] );第二大元素會被移到動 a[ n— i] 上以此類,推 ,經(jīng)過n —I輪的較,比將每次比較結(jié)中的果較數(shù)小向存前,放直到把最小數(shù)把
…交
…
,
比后,較這個n數(shù)序排功成。法算碼代如下:v
o i d ub b lb e
—
換到第一個位
置原理,和到最大找數(shù)存放到最一樣后然后根據(jù),標(biāo) 識變量值判斷的是否始開進(jìn)行下一輪的比較。改進(jìn)后的法如算下:
ouid bu bbl e
—s
o rt i ( tn a 1 . i n t n l) l n示表教a組的元個數(shù)黌
i - O; i
s
0
—
b e t ter ( i n t a[ 】,i n t n //)n為數(shù)組 a的元個數(shù)
{素
{
F o r( i=:0 i
F
o r (
{
,
,每—輪 b鞍前n一E1 - i個 p胡邑}痔好的最i后個不E用 較
FO (r
{ {
fD r g ( j =。 0;; j n駕一( 1要 1一考; j” )莠/ 蕷, 從第堡一對始開比始較, 到最拭大值
{
J
-o; j
i F(a[ 1ja>【J 1+ l】{
i
f ( a[J>】a J[+ l 1 't
e mp-£ j】; af j 1 [ aJ *lk
F la;g; 0//存在據(jù)數(shù)換變標(biāo),變量賦識為值 0
t me p a【 j】; a j【】= a【j 1】+ a【;j’ 1】一 t em p;
'
k n=一1- i:
a( J+ l l- t e砷
};’ ’
Fi( a[ k] a
{
小l F a=g0;
}
3算.的法改進(jìn) 3 . 若排1序提前完 成,減少不必要的循環(huán)上述法中算若數(shù),包含組個元n,素那么必須進(jìn) n行一 1輪比 。在較多情數(shù)況下, n個對數(shù)進(jìn)行序排,并一定要進(jìn)不行n l~輪
}比
t em=pa k】【; a【 k Ia £k 1一】: a【 一k 1】;te m p;
' '
“l(fā) a g=  ̄l
;
’;;蓁顰器 備棠譬湊 數(shù)據(jù)交換排序已莞 成
)
較
。例對如5 8 9 1 23這個六數(shù)行排序,進(jìn)只需進(jìn)行要3輪比較就可以排序功成,而需不進(jìn)行 5要比輪較。說這在明第 n-1輪比較經(jīng)上過述進(jìn),改算在法每一輪較的效比上提率高一倍了但。值前,就有可能完成排,因序,此可對以上算述法進(jìn)改進(jìn)。改進(jìn)行突的注得意的,是改的主要進(jìn)果是效少減了環(huán)循次數(shù),對于據(jù)數(shù)換次破點交在果排如序在第~nl輪比前較經(jīng)已完成,則再不進(jìn)行續(xù)后比數(shù)而言 并,有減沒少。較,可減少 循環(huán)次數(shù)。具體方法是:設(shè) 一置個量變來標(biāo)識 前輪當(dāng)?shù)?結(jié)束 4語
比是否存較在據(jù)數(shù)交的換情況,如存果數(shù)據(jù)在交,則說換明序可排傳統(tǒng)冒的泡序算法代碼簡排潔,能穩(wěn)性定,通上述過的進(jìn)改, 能仍完未成,本輪比較結(jié)后繼續(xù)束下一輪比較, 果如存在數(shù)不交據(jù)可減以少循環(huán)次的數(shù)提,高算法的效率 但,總體言其而時間復(fù)度雜換,則說明當(dāng)前輪較時比,排 已序完經(jīng)成,不用再繼續(xù)進(jìn)行后續(xù)的 仍較然高為 n2,冒泡排序法適算用于規(guī)較模小排序的。 較。比在每輪一比較開時,始給識標(biāo)量賦值變?yōu)?1,然后在每輪一的 考參獻(xiàn)文: 兩相鄰兩的數(shù)較時,比果如在存數(shù)據(jù)交,換則將標(biāo)識變量的值改為[ 1]蔚敏嚴(yán)數(shù).據(jù)構(gòu)[結(jié)M] .清華大學(xué)出社,版19 9 7, 4
總結(jié)
以上是生活随笔為你收集整理的c语言数据交换的算法流程图,C语言冒泡排序算法浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab m文件的编写,Matlab
- 下一篇: Maven学习(一)————Maven技