C語言的簡單應用(五)下

2021-08-03 22:18:22 字數 2817 閱讀 8331

簡單選擇排序(平均時間o(n²),不穩定)

#include

#define max 10

void ******sort(int a,int len)

}}int main()

******sort(a,len);

puts("the ******sort order:");

for(i=1;i<=len;i++)

printf("%d ",a[i]);

return

0;}

推排序(平均時間o(n㏒₂n),不穩定)

簡單選擇排序的每次排序除了找到當前最小的關鍵字外,還產生了許多時間開銷大的比較的結果資訊,但並沒有利用這些資訊。堆排序(heap sort)是針對簡單選擇排序所存在的上述問題改進的一種方法。

堆的一些特徵

1、是一顆完全二叉樹

2、每個節點值均小於(大於)或等於它的兩個孩子節點(如果存在的話)的值

3、樹根節點(稱為堆頂元素)的值最小(稱為小頂堆)或最大(稱為大頂堆)。故堆頂元素必為最小(或最大)

堆排序基本思想

堆中元素採用陣列方式儲存,只是將陣列儲存的記錄看成一顆完全二叉樹的節點 ,並利用完全二叉樹中雙親節點與左右孩子節點的內在關係來進行排序。具體過程:將一組用陣列儲存的待排序的記錄,首先把它們按堆的定義組成乙個堆,將堆頂元素取出;然後把剩下的記錄再建成堆;如此反覆,直到取出全部元素,從而將全部記錄排序為有序序列。

實施步驟

一、序列轉換為完全二叉樹:對於任意位置,若父節點的位置為i,則它的兩個子節點分別位於2i和2i+1。

二、建堆(將完全二叉樹調整為為堆):

1、從中間節點開始調整。

2、找出以此節點為父節點的兩個孩子節點的較小值(或較大值),並與父節點比較,若小(大)則與父節點進行交換。然後以交換後的子節點作為新的父節點。重複此步驟直到沒有子節點。

3、將步驟2中原來父節點的位置往前推乙個位置,作為新的父節點。重複步驟2,直到根節點位置,此時完全二茶樹將稱為乙個堆。

三、堆排序:輸出堆頂元素後,調整剩餘n-1個節點,使其關鍵字成為乙個新堆。

1、輸出堆頂節點,將堆頂元素與堆底(最後乙個)節點交換

2、從根節點開始,重複第步驟中的2

3、1,共進行n-1次,直到只剩下根節點並把該根節點輸出為止。

完整**

#include

#define max 10

void sift(int a,int k,int n)

}a[i]=t;

}void creatheap(int a,int len)

void heapsort(int a,int len)

}int main()

heapsort(a,len);

printf("the heapsort order:");

for(i=len;i>=1;i--)

printf("%d ",a[i]);

return

0;}

歸併排序(平均時間o(n㏒₂n),穩定)多用於外部排序

歸併排序(merging sort)是指將兩個或兩個以上的有序序列合併為乙個新的有序序列)

#include#define max 10

void merge(int a,int low ,int

mid,int high,int b)

else

}while(i<=mid)

while(j<=high)

}void msort(int a,int low ,int high,int b)

}int main()

msort(a,1,len,a);

printf("the sort order:");

for(i=1;i<=len;i++)

printf("%d ",a[i]);

return 0;

}

總結

終於。。。完成了對資料結構的梳理與歸納,但還遠遠不夠,比起應用來說這還還不夠,資料結構是門好學科,特別是裡面的排序演算法,我個人認為學起來很舒服,讓人感覺很充實,當然,對於資料結構這門課來說,我認為前面的鍊錶和堆疊佇列部分是重中之重,它們真可謂是資料結構的基石部分啊,唯有對這些基石達到應用自如的地步,後面的樹、圖都不是什麼難點,說實話,現在回過頭來看看以前的知識盲點,我發覺還是以前沒有用心,沒能沉下心來好好閱讀,量變引起質變,這句話可謂是真理,從7月10號到今天,大約乙個禮拜的時間,每天的**量保持在200+,感覺敲敲**也不是什麼特別費腦子的事情,反而敲之前的沉思倒花去了大半的時間,實踐是檢驗真理的唯一標準,哈哈哈,開始新的征服之旅啦!

C語言陣列應用的簡單應用 掃雷遊戲

1.掃雷遊戲 c初學者的簡單版本 實現 難度選擇,不同的雷數的計算方法產生不同的難度 第一次踩到雷不會跳出 如果座標周圍沒有雷的時候,擴充套件座標。源 game.h 檔名稱 排雷遊戲 當前版本 1.1 完成日期 2018年4月23日 取代版本 1.0 ifndef game h define gam...

C的簡單應用(第五天)

專案名稱 物聯網工程實踐 蘇嵌實訓第5天 今日進度以及任務 1,free是如何知道需要釋放的空間大小。實現原理 2,static在什麼樣的情況下使用?3,為什麼要使用typedef給型別重新命名?本日任務完成情況 一 free函式通常和malloc函式共同使用,malloc函式通過作業系統分配,直接...

C語言結構體簡單應用範例

結構體簡單應用舉例。include struct student void main void struct student tom struct student he tom 通過指標訪問結構體及其成員 我們不能像讀寫變數一樣讀寫 student 結構體 不能直接對結構體進行比較,例如 sam t...