PHP array_multisort()函數(shù)超詳細(xì)理解
1068
2025-03-31
和上篇博文:簡(jiǎn)單的成績(jī)錄入系統(tǒng)程序及分析以及思考一樣,這篇也是一年前做的筆記,真恨自己當(dāng)時(shí)為什么就不知道使用博客記筆記,有了博客,就可以看到自己學(xué)習(xí)的點(diǎn)滴和進(jìn)步,記筆記也方便,還能分享知識(shí)。
本文檔致力于練習(xí)冒泡排序法,用c語(yǔ)言的各種語(yǔ)法,例如數(shù)組,指針等知識(shí)進(jìn)行編程,達(dá)到既對(duì)算法的一次實(shí)踐,又對(duì)語(yǔ)法的一次回顧,爭(zhēng)取熟悉c編程語(yǔ)言,不斷應(yīng)用c語(yǔ)言,實(shí)現(xiàn)最后的推陳出新。
冒泡排序法是一種重要的排序思想,本次練習(xí)要實(shí)現(xiàn)玩轉(zhuǎn)冒泡排序法,同樣,本程序中的排序算法均在一個(gè)定義的函數(shù)中實(shí)現(xiàn),不斷改變的是數(shù)組與指針的用法,但指針僅限于列指針。下面是第一個(gè)源程序:
#include
int main()
{
void bubble(int *p,int n);??? //冒泡排序法函數(shù)聲明
int array[10],i;
printf("Please input 10 interger numble:\n");
for(i=0;i<=9;i++)
scanf("%d",&array[i]);??????? //輸入十個(gè)整數(shù)
bubble(array,10);???????????? //冒泡排序函數(shù)調(diào)用
printf("The order of the numble concerned is:\n");
for(i=0;i<=9;i++)?????? ??????//輸出排序后的數(shù)
printf("%d ",array[i]);
printf("\n");
return 0;
}
void bubble(int *p,int n)??????? //冒泡排序函數(shù)定義
{
int i,j,temp;
for(i=0;i<=n-2;i++)
for(j=0;j if(p[j]>p[j+1]) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } } 注意,bubble函數(shù)中的指針p,使用時(shí)用了p[]形式,這樣做是為了與數(shù)組類似,便于理解。下面將其改成等效形式: void bubble(int *p,int n)??????? //冒泡排序函數(shù)定義 { int i,j,temp; for(i=0;i<=n-2;i++) for(j=0;j if(*(p+j)>*(p+j+1)) { temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; } } 主函數(shù)中使用數(shù)組,定義函數(shù)bubble的形參使用指針時(shí)一種常用的形式,使用指針進(jìn)行編程是c語(yǔ)言的精髓,是一種高效的形式。 下面的源程序?qū)ι鲜龀绦蜻M(jìn)行改進(jìn),將主函數(shù)中的數(shù)組也用指針進(jìn)行處理: #include int main() { void bubble(int *p,int n);??? //冒泡排序法函數(shù)聲明 int array[10],i; int *pp=array,*pp_end=pp+9; printf("Please input 10 interger numble:\n"); for(;pp<=pp_end;pp++) scanf("%d",pp);??????? //輸入十個(gè)整數(shù) pp=array; bubble(pp,10);???????????? //冒泡排序函數(shù)調(diào)用 printf("The order of the numble concerned is:\n"); pp=array; for(;pp<=pp_end;pp++)???????????? //輸出排序后的數(shù) printf("%d ",*pp); printf("\n"); return 0; } void bubble(int *p,int n)??????? //冒泡排序函數(shù)定義 { int i,j,temp; for(i=0;i<=n-2;i++) for(j=0;j if(*(p+j)>*(p+j+1)) { temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; } } 最后,介紹下冒泡程序的編程思想: 冒泡排序的思想就是依次對(duì)兩個(gè)順序的數(shù)進(jìn)行比較,小的浮上來(lái),大的沉下去。假如對(duì)N個(gè)數(shù)進(jìn)行冒泡法排序,首先將N個(gè)數(shù)放入數(shù)組當(dāng)中array[N],讓后進(jìn)行N-1次大的循環(huán),即for(i=0;i 接著,在大循環(huán)(i=0)下進(jìn)行小循環(huán),例如第一次循環(huán)是array[0]與array[1]比較,如果array[0]大,則交換順序,然后array[1]與array[2]比較,大的沉下去,一直到array[N-2]與array[N-1]比較,大的沉下去,總共比較了N-1-0次,經(jīng)歷這次比較,最大的數(shù)沉到了最下面。 之后,用同樣的方法對(duì)array[0]到array[N-2]進(jìn)行比較,次大的數(shù)沉到了array[N-2]的地址中,總共經(jīng)歷了N-1-1次比較。 當(dāng)i=N-2時(shí)候,需要比較的是array[0]與array[1]即array[N-1-(N-2)],大的沉入array[1]中,則array[0]中為最小的數(shù),這樣就實(shí)現(xiàn)了冒泡排序。 總之,小循環(huán)的次數(shù)為N-1-i。 數(shù)據(jù)結(jié)構(gòu)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。