c 冒泡排序_C语言中选择排序和冒泡排序
點(diǎn)擊上方“C語(yǔ)言中文社區(qū)”,選擇“設(shè)為星標(biāo)★”
技術(shù)干貨第一時(shí)間送達(dá)!
來(lái)源:https://blog.csdn.net/zjy18886018024/category_7741145.html
今天給大家分享一些關(guān)于C語(yǔ)言的算法,選擇排序和冒泡排序。
對(duì)于選擇排序,首先理解排序的思想。給定一個(gè)數(shù)組,這種思想首先假定數(shù)組的首元素為最大或者最小的。此時(shí)就要利用3個(gè)變量表示元素的下標(biāo)。一個(gè)表示當(dāng)前,一個(gè)表示找到的最大或者最小的下標(biāo),一個(gè)用于存放每次循環(huán)中最大值的下標(biāo)。在掌握了程序的基本思想之后,再進(jìn)行排序。找到最大的下標(biāo)后賦給每次除非的那個(gè)最大的下標(biāo)。找到之后判斷所假設(shè)的當(dāng)前值是否為此次循環(huán)的最大值,如果不是,就交換最大 與當(dāng)前的值,從而將數(shù)組以一定的順序排放,最后寫(xiě)一個(gè)循環(huán)將結(jié)果輸出。代碼不是很難,所以我就逐步講解了,只是附上代碼,不懂的可以給我留言,我給大家講解或者有什么不好的地方,我也好修正。
#includevoid main()//主函數(shù){ int a[10]; int i,j,w; printf("請(qǐng)輸入10個(gè)數(shù)字:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { for(j=0;j<10;j++) if(a[i]//進(jìn)行比較//比較后進(jìn)行交換{ w=a[i]; a[i]=a[j]; a[j]=w;} }printf("排序后:\n"); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n");}結(jié)果展示:
接下來(lái)是冒泡排序,這個(gè)是C語(yǔ)言中最常用的算法之一,因?yàn)檫@個(gè)比較容易理解,多數(shù)人在他們要進(jìn)行排序的時(shí)候首先使用的就是這個(gè)算法。這個(gè)算法比較容易理解。對(duì)于冒泡排序,主要采用的是相鄰數(shù)兩兩進(jìn)行比較的思想。如果后一個(gè)比前一個(gè)大或者小,則將其調(diào)換位置,直至所有的數(shù)都比較完。如果給定一個(gè)大小為n的數(shù)組,那么需要比較n-1趟,每一趟比較n-1-i次 ,i 表示上次循環(huán)中已經(jīng)比較完的下標(biāo)。寫(xiě)兩個(gè)循環(huán)判斷,如需交換則進(jìn)行交換,如果不需要交換則進(jìn)行下兩個(gè)數(shù)的比較,直到所有的數(shù)比較完。最后,用一個(gè)循環(huán)將排序完成后的數(shù)全部輸出。代碼如下:
#include#define N 10void main(){ int a[10]; int i,j,t; printf("請(qǐng)輸入10個(gè)數(shù)字:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]);//使用兩層循環(huán) for(i=0;i-1;i++) { for(j=i+1;j1);j++) if(a[j]1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t;}}printf("排序后:\n"); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n");}結(jié)果:
結(jié)論淺說(shuō):
對(duì)于選擇排序的分析是很簡(jiǎn)單的,輸入的規(guī)模由數(shù)組元素決定,基本操作是鍵值比較A[j]
冒泡排序就是相鄰兩個(gè)數(shù)相比較,大數(shù)就沉底(或者小數(shù)上浮的過(guò)程),總共進(jìn)行了n-1次比較和交換。上面的冒泡算法為了便于算法的實(shí)現(xiàn),所以考慮只使用一個(gè)一維數(shù)組來(lái)存放10個(gè)整型數(shù)據(jù)。排序過(guò)程中數(shù)據(jù)始終在這個(gè)數(shù)組中(原地操作,不占用額外的空間)。所以該算法的時(shí)間復(fù)雜度為O(n-1),空間復(fù)雜度為O(1)。
精選文章
圍觀
更新一波資源,請(qǐng)快速領(lǐng)取!
熱文
超級(jí)干貨:Linux常用命令 & 實(shí)用命令萬(wàn)字總結(jié)!
熱文
文件操作之fprintf和fscanf函數(shù)
熱文
計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)知識(shí)總結(jié)
熱文
C/C++學(xué)習(xí)筆記——C提高:指針強(qiáng)化
【END】
如果您覺(jué)得本篇文章對(duì)您有幫助請(qǐng)轉(zhuǎn)發(fā)給更多的人
順手點(diǎn)一下“在看”也是對(duì)小編最大的支持
總結(jié)
以上是生活随笔為你收集整理的c 冒泡排序_C语言中选择排序和冒泡排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python动态图片转字符画_GIF动态
- 下一篇: cstring查找子字符串_动态规划6: