一.冒泡算法
自己的理解:
對(duì)于n個(gè)數(shù),
第1趟:比較n-1次才能找出最大(最?。┑臄?shù)字,
第2趟:比較n-2次,
第3趟:比較n-3次
... ...
第n-1趟: 比較1次。(完結(jié))
特點(diǎn):每趟比較都是相鄰的兩個(gè)數(shù)比較,然后把兩個(gè)之中較大(升序)的放在后面,一趟完畢,最大的數(shù)字就被找出來了,下次不再比較。
對(duì)應(yīng)的代碼:
mian(){
int a[10],i,j;
int t; //臨時(shí)變量
/*輸入10個(gè)數(shù)據(jù)*/
for(i=0;i<10;i++){ scanf("%d",&a[i]); }
/*開始冒泡排序*/
for(j=0;j<9;j++){
for(i=0;i<9-j;i++)
if(a[i]<a[i+1]) {
/*相鄰元素比較,交換大的放前面*/
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
//此處的9,實(shí)質(zhì)是n-1.
}
//時(shí)間復(fù)雜度O(n^2)
二.選擇排序
原理:
選擇排序很簡(jiǎn)單,他的步驟如下:
從左至右遍歷,找到最小(大)的元素的下標(biāo),然后與第一個(gè)元素交換。
從剩余未排序元素中繼續(xù)尋找最?。ù螅┰兀缓笈c第二個(gè)元素進(jìn)行交換。
以此類推,直到所有元素均排序完畢。
之所以稱之為選擇排序,是因?yàn)槊恳淮伪闅v未排序的序列我們總是從中選擇出最小的元素。
public void sort(){
for(int i = 0; i < arraytoSort.length - 1 ; i++){
int min = i;
int temp;
//找出最小值的下標(biāo)
for(int j = i + 1; j < arraytoSort.length ; j++){
if(arraytoSort[j] < arraytoSort[min]){
min = j;
}
}
//交換i與min的數(shù)組元素,下次+1不再比較了
temp = arraytoSort[min];
arraytoSort[min] = arraytoSort[i];
arraytoSort[i] = temp;
}
}
//時(shí)間復(fù)雜度O(n^2).
三.常用數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度
干貨分享:http://blog.csdn.net/stardhb/article/details/50453127