氣泡排序是基礎排序之一,也是一種穩定排序。無論是邏輯還是**都比較簡單。
思路就是比較陣列的前後兩個元素的大小,如果前面的元素比後面的元素大,就讓兩個元素交換。 這樣當一輪排序結束後,最大的數就會放到最後,這個過程就像水中的氣泡一樣,一點一點上浮,氣泡排序就是讓資料一點一點移動。
(來自網路)
於是每走完完整的一趟,下一次就可以少比較一次,因為最大的數已經在最後面了,所以我們就可以使用雙層迴圈,一層迴圈控制一共需要走多少個迴圈,裡面的迴圈控制這一次一共需要比較多少次。
int
*bubblesort
(int
* data,
int nums)
//氣泡排序
return data;
}
若是有十個數,我們就一共需要排九遍,分別需要比較9,8,7,6,5,4,3,2,1次,所以我們就可以知道氣泡排序需要跑(n-1)!次。所以他的時間複雜度是o(n²)。額外的空間複雜度o(1)。
選擇排序也是一種基礎的排序方法。基本思想是,直接在所有元素中找到最大的或者最小的,然後和第乙個元素或者最後乙個元素交換,接著在找第二大的元素,與第二個或者倒數第二個元素交換。以此類推,知道所有元素都排好序了。
如所示。我們也可以完成排序。相比氣泡排序。選擇排序少了很多交換操作。同樣也需要比較(n-1)!次,所以時間複雜度也是o(n²),空間複雜度o(1)。雖然相比氣泡排序少了很多交換操作,但依然是n²的複雜度。所以在面對大量資料時效率也不高。
int
*selectsort
(int
* data,
int nums)
//選擇排序
if(cur != i)
swap
(&data[cur]
,&data[i]);
}return data;
}
插入排序也是邏輯很簡單的實用排序演算法,它的思想是:將元素插入到乙個有序的元素集合中,我們在排序的時候。是沒有現成的有序集合的,所以我們可以將我們需要排序的陣列的第乙個元素看做乙個只有乙個元素的有序集合。然後從第二個元素開始,乙個乙個插入到前方的有序集合中去。我們就可以最終得到排序完成的陣列。
(來自網路)
在執行插入時,我們從後向前比較,如果有序集合的末尾元素比我們需要插入的元素大,就讓末尾元素向後移動,直到出現乙個元素比我們的插入元素小時,我們就插入在這個元素的後面即可完成一次插入。
int
*insertsort
(int
* data,
int nums)
//插入排序
data[
++j]
= cur;
}return data;
}
同樣的,插入排序也是時間複雜度為o(n²)的演算法。
第一次我們介紹了三種基本的排序方法。他們的時間複雜度都是o(n²),所以如果當遇到大量的資料時,使用這樣的排序方法就會導致很慢。所以,也會有以此為基礎的更有優勢的排序演算法。例如希爾排序,快速排序等等。我們下次再說~
C語言排序演算法( 冒泡,選擇,插入,,,)
1.bubble sort 為氣泡排序 所謂冒泡就像水裡的氣泡一樣,越往上走越大,所以元素列中的越大的元素經過兩兩比較通過交換最終浮到頂端,故稱bubble sort。實現如下 includeint main 15個元素 int count 0 第一輪比較 for int i 0 i 15 1 i ...
C語言 冒泡,選擇排序
1.冒泡演算法 簡單定義 大數下沉,小數起泡 實現 include void funcscort int arr,int len int main int argc,const char argv 排序 funcscort a,10 列印 for int i 0 i 10 i return 0 輸出...
C語言氣泡排序 選擇排序
一,氣泡排序 假如給n個數從小到大排序 思想 總共跑n趟,每一趟都把無序陣列中相鄰的數 不符合順序,即前者 後者,a j a j 1 交換,兩兩交換,n個數最多交換n 1次。note 交換可以定義乙個temp來交換,也可以直接呼叫庫函式swap。include include include inc...