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