![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
iteye_12023
这个作者很懒,什么都没留下…
展开
-
选择、插入、冒泡排序
[size=medium]* 选择排序將要排序的對象分作兩部份,一個是已排序的,一個是未排序的,從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個,例如:排序前:70 80 31 37 10 1 48 60 33 80 1. [1] 80 31 37 10 70 48 60 33 80 選出最小值1 2. [1 10] 31 37 80 70 48 ...原创 2011-03-02 16:31:34 · 81 阅读 · 0 评论 -
二分搜寻法(搜寻原则的代表)
說明如果搜尋的數列已經有排序,應該儘量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。解法在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋的對象,所以無需浪費時間在左邊的數;如果搜尋的數大於所搜尋的對象,則右邊的數無需再搜尋,直接搜尋左邊的數。所以在二分搜尋法中,將...原创 2011-03-02 16:58:57 · 150 阅读 · 0 评论 -
循序搜寻法(使用卫兵)
說明搜尋的目的,是在「已排序的資料」中尋找指定的資料,而當中循序搜尋是最基本的搜尋法,只要從資料開頭尋找到最後,看看是否找到資料即可。解法初學者看到循序搜尋,多數都會使用以下的方式來進行搜尋:[code="java"]while(i < MAX) { if(number[i] == k) { printf("找到指定值"); break...原创 2011-03-02 16:57:45 · 185 阅读 · 0 评论 -
合并排序法
[b]說明[/b]之前所介紹的排序法都是在同一個陣列中的排序,考慮今日有兩筆或兩筆以上的資料,它可能是不同陣列中的資料,或是不同檔案中的資料,如何為它們進行排序?[b]解法[/b]可以使用合併排序法,合併排序法基本是將兩筆已排序的資料合併並進行排序,如果所讀入的資料尚未排序,可以先利用其它的排序方式來處理這兩筆資料,然後再將排序好的這兩筆資料合併。有人問道,如果兩筆資料本身就無...原创 2011-03-02 16:56:10 · 79 阅读 · 0 评论 -
快速排序法(三)
[b]說明[/b]之前說過軸的選擇是快速排序法的效率關鍵之一,在這邊的快速排序法的軸選擇方式更加快了快速排序法的效率,它是來自演算法名書 Introduction to Algorithms 之中。[b]解法[/b]先說明這個快速排序法的概念,它以最右邊(或最左邊)的值s作比較的標準,將整個數列分為三個部份,一個是小於s的部份,一個是大於s的部份,一個是未處理的部份,如下所示 :[...原创 2011-03-02 16:49:50 · 82 阅读 · 0 评论 -
快速排序法(二)
[b]說明[/b]在 快速排序法(一) 中,每次將最左邊的元素設為軸,而之前曾經說過,快速排序法的加速在於軸的選擇,在這個例子中,只將軸設定為中間的元素,依這個元素作基準進行比較,這可以增加快速排序法的效率。[b]解法[/b]在這個例子中,取中間的元素s作比較,同樣的先得右找比s大的索引 i,然後找比s小的索引 j,只要兩邊的索引還沒有交會,就交換 i 與 j 的元素值,這次不用再進行...原创 2011-03-02 16:46:31 · 53 阅读 · 0 评论 -
快速排序法(一)
說明快速排序法(quick sort)是目前所公認最快的排序方法之一(視解題的對象而定),雖然快速排序法在最差狀況下可以達O(n2),但是在多數的情況下,快速排序法的效率表現是相當不錯的。快速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二,分別對左邊與右邊數列進行排序,而影響快速排序法效率的正是軸心的選擇。這邊所介紹的第一個快速排序法版本,是在多數的教科書上所提及...原创 2011-03-02 16:45:18 · 97 阅读 · 0 评论 -
Heap 排序法 - 改良的选择排序
[b]說明[/b]選擇排序法的概念簡單,每次從未排序部份選一最小值,插入已排序部份的後端,其時間主要花費於在整個未排序部份尋找最小值,如果能讓搜尋最小值的方式加快,選擇排序法的速率也就可以加快,Heap排序法讓搜尋的路徑由樹根至最後一個樹葉,而不是整個未排序部份,因而稱之為改良的選擇排序法。[b]解法[/b]Heap排序法使用Heap Tree(堆積樹),樹是一種資料結構,而堆積樹是一...原创 2011-03-02 16:43:51 · 103 阅读 · 0 评论 -
Shaker 排序法 - 改良的冒泡排序
說明請看看之前介紹過的氣泡排序法: [code="java"] for(i = 0; i < MAX-1 && flag == 1; i++) { flag = 0; for(j = 0; j < MAX-i-1; j++) { if(number[j+1] < number[j]) { ...原创 2011-03-02 16:39:21 · 89 阅读 · 0 评论 -
Shell 排序法 - 改良的插入排序
Shell排序法最初是D.L Shell於1959所提出,假設要排序的元素有n個,則每次進行插入排序時並不是所有的元素同時進行時,而是取一段間隔。Shell首先將間隔設定為n/2,然後跳躍進行插入排序,再來將間隔n/4,跳躍進行排序動作,再來間隔設定為n/8、n/16,直到間隔為1之後的最後一次排序終止,由於上一次的排序動作都會將固定間隔內的元素排序好,所以當間隔越來越小時,某些元素位於正...原创 2011-03-02 16:37:32 · 97 阅读 · 0 评论 -
排列組合
[b]說明[/b]將一組數字、字母或符號進行排列,以得到不同的組合順序,例如1 2 3這三個數的排列組合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。[b]解法[/b]可以使用遞迴將問題切割為較小的單元進行排列組合,例如1 2 3 4的排列可以分為1 [2 3 4]、2 [1 3 4]、3 [1 2 4]、4 [1 2 3]進行排列,這邊利用旋轉法,先將旋...原创 2011-03-02 17:01:59 · 75 阅读 · 0 评论