對於桶排序,其實非常簡單,只是需要用乙個一維陣列便可以解決。
比如,我們需要對一串1~100範圍內的數進行排序,現在給出這樣的一串數:2,
30,25,11,25
。如果要對這五個數進行排序,我們首先就要開始構建出裝這些資料的桶,因為開始說了範圍為
1~100
,所以我們需要
100個桶,但是為了方便桶的序號與我們的資料相同,所以一般選擇定義乙個
a[101]
這樣的大桶,然後我們將每乙個陣列序號想象為乙個桶,因為開始桶裡面是沒有東西的,所以我們將陣列的初值都定義為0。
接著我們就需要將我們的資料放進桶裡面了,比如第乙個數為2,那麼
a[2]
就加一,即
a[2]
的值就從
0變成了
1,同理將後面的後面的數也放進桶之中,注意!因為
25出現了兩次,那麼
a[25]
也會加兩次。即
a[25]
的值會從0變成
2。#includeint main()
for(i=0;i<5;i++)
for(i=0;i<101;i++)//依次檢驗桶裡面是否有東西
}} for(i=0;i
圖 3氣泡排序**
ps:因為氣泡排序使用了兩個巢狀的迴圈,所以氣泡排序的時間複雜度較高。
相比較於桶排序和氣泡排序,快速排序無論是在時間複雜度還是空間上都更加優秀。
假設現在我們對「4 2 5 6 1 3」這6
個數進行排序,首先我們先選定乙個基準數,在這裡我們選定
4為基準數(隨機選擇,其他的都可以)。
425
613接著我們就需要開始從序列的兩端開始探測,假設j從序列的右邊開始向左探測,
i從序列的左邊開始向右探測,
j的任務是尋找比基準數小的元素,
i的任務是尋找比基準數大的元素,注意,每一次探測,必須先從右邊開始,即先從
j開始。
j開始探測,發現了
3比基準數小,標記,接著
i開始探測,發現
5比基準數大,標記。
425(
i) 6
13(j)
將i和j
標記的數互換,但是i和
j的位置不換。
423(
i) 6
15(j)
i和j繼續探測,
j發現了1,
i發現了
6,互換。
423
1(i)
6(j)
5然後j繼續向左走,發現了
1,注意,此時i和
j碰面了,這時我們只需要將基準數和
i和碰面的數交換即可。 1
23465
此時我們發現基準數左邊都是比基準數小的數,右邊全是比基準數大的數,然後用同樣的方法來處理基準數兩邊的序列,即處理「1 2 3
」這個序列和「
6 5」這個序列。
其實快速排序就是將選定的基準數歸位,直到所有的基準數都歸位,那麼序列也就排好了。
#includeint a[101],n;//定義兩個全域性變數,在子函式中使用。
void quicksort(int left,int right)//定義快排函式
{ int i,j,t,temp;
if(left>right)
return;
temp=a[left];//temp中為基準數
i=left;j=right;
while(i!=j)
{ while(a[j]>=temp&&i
圖 4快速排序**
排序的演算法還有很多,這裡只是簡單介紹了這三種。
形形色色的頂帖理由
小朋友 不頂是小狗!小學生 不頂進不了重點中學!初中生 不頂只有去念職高!高中生 不頂考不上好大學!大學生 不頂找不到好工作!碩士生 不頂只有去當博士!博士生 不頂只有去博物館!幼稚園阿姨 不頂只有去當服務員!小學老師 不頂只有去當幼稚園阿姨!中學老師 不頂不能帶重點班!大學助教 不頂評不上講師!大...
形形色色的資料庫
前言 前面我們講了一些關於系統設計指標的一些基本概念,即可靠性,擴充套件性,易維護性。後面幾篇本文將從資料庫這個角度去介紹一些分布式系統的相關概念,主要介紹常用的一些資料庫相關的內容,包括單機的,分布式的,介紹一些他們各自的設計特性,設計模式等等。關於資料庫 想象一下,如果你是乙個開發者,你面對乙個...
認識生活中形形色色感測器
生活中,有許多的感測器,我們會見到,不知不覺中,我們就在他們身邊,只是你不經心而已。好吧,來說說,都有啥吧。室內的溫濕度顯示表盤 儀盤等 當前溫度 濕度 這裡面有就有溫濕度感測器 廚房內,我們的煤氣洩漏報警器,有 有害氣體 危險氣體 感測器 當煤氣洩漏,他就會報警,滴滴滴。室外的,視窗或者觀測站,有...