老師,交換次數(shù)和比較次數(shù)應(yīng)該怎么加上去呢
![]() ![]() 學(xué)習(xí)達(dá)人
|
T925778rr
展開
老師,交換次數(shù)和比較次數(shù)應(yīng)該怎么加上去呢 ![]() hdylnpu
講師
展開
@ T925778rr 你好,可以設(shè)置兩個(gè)變量。一個(gè)用于統(tǒng)計(jì)交換次數(shù),一個(gè)用于統(tǒng)計(jì)比較次數(shù)。
當(dāng)發(fā)生比較或者交換時(shí),相應(yīng)的變量增1即可統(tǒng)計(jì)。
排序算法有很多,不同的排序算法,不同的初始數(shù)據(jù),其交換和比較次數(shù)也不同,日常學(xué)習(xí)測(cè)試體會(huì)不出差別,但是實(shí)用中大量數(shù)據(jù)時(shí)應(yīng)該差別顯著。這些屬于數(shù)據(jù)結(jié)構(gòu)的知識(shí)。 |
![]() ![]() 學(xué)習(xí)達(dá)人
|
hdylnpu
講師
展開
|
![]() ![]() 學(xué)習(xí)達(dá)人
|
WXnen3c7od3
展開
for(i=0;i<=8;i++){
min=i;
for(k=i+1;k<=9;k++){
if(a[k]<a[min])
min=k;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
老師好,這里面如果a[k]>=a[i]的時(shí)候,依然執(zhí)行a[i]和a[min]互換,只是這個(gè)時(shí)候兩者本就相等對(duì)吧 |
![]() ![]() 學(xué)習(xí)達(dá)人
|
天下無醫(yī)
展開
#include<stdio.h>
main(){
int a[]={9,88,77,55,66,44,3,46,11,1};
int min,i=0,t;
while(i<10){
int k=i+1;
while(k<=9){
if(a[k]<a[i])
min=k;
k++;}
t=a[min];a[i]=a[min];a[min]=t;
i++;
}
printf("排序后的為:");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
用while語句寫,不知道哪里出錯(cuò)了,麻煩老師幫忙指正一下。 |
![]() ![]() 學(xué)習(xí)達(dá)人
|
T732065kz
展開
您好,不是定義了10個(gè)整形數(shù)組,為什么i<=8而不是i<=9呢? ![]() hdylnpu
講師
展開
@ T732065kz 你好,選擇排序的核心是,從待排序數(shù)據(jù)中找到一個(gè)最小數(shù),和數(shù)組的零號(hào)元素交換。然后從剩下的數(shù)據(jù)中找到一個(gè)最小數(shù)和數(shù)組的 1 號(hào)元素交換。以此類推,當(dāng)有10個(gè)數(shù)時(shí),進(jìn)行9次這樣的操作,找到9個(gè)相對(duì)小的數(shù),并將其交換到合適的位置,剩下最后一個(gè)數(shù)肯定是位置正確的。
本例中,循環(huán)變量i的初值為0,終止為小于等于8,即i的取值為0到8共9個(gè)數(shù)據(jù),循環(huán)執(zhí)行9次。 |
![]() ![]() 學(xué)習(xí)達(dá)人
|
T925778rr
展開
|
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。