一直以來我對於演算法這門課都很抗拒,感覺非常難上手,很多概念理解起來也很抽象,但問題是搞不清楚這部分內容,我很可能比不了業,非常感謝《演算法**》這本書,雖然寫的內容很淺顯,但最起碼沒有那麼晦澀難懂,有些概念講的很有意思,所以學習時候自然而然的就會想要知道的更多,然後主動蒐集資料。
今天想總結的內容是,選擇排序。
這一部分知識的內容包括了記憶體,陣列和鍊錶,索引等概念。
一、記憶體:計算機記憶體主要是用於暫時存放cpu中的運算資料,及硬碟外部儲存器交換的資料。feoffeeb是乙個記憶體的單元位址,需要儲存資料時,計算機給乙個儲存位址,需要儲存多項資料時,有兩種基本方式:陣列和鍊錶。
二、陣列和鍊錶
陣列:是用於儲存多個相同型別的集合,優勢是有序,只管,缺點是額外請求的位置可能用不上,以至於浪費記憶體(你沒有用,別人也用不了),當代辦事件超過記憶體請求,還需要轉移記憶體。
解決方法:使用鍊錶
鍊錶:鍊錶中的元素可儲存在記憶體中的任何地方;是一種物理儲存單元上的非連續或者非順序的儲存結構;鍊錶在讀取其中乙個元素時,需要其他元素推理到此元素,使得效率降低。
如第乙個元素為00,若是一陣列的方式儲存,很容易得到第五個元素是04;陣列支援隨機訪問,讀取鍊錶則需要讀取這個元素之前的所有元素;在同乙個陣列中,所有元素的型別必須相同,如都為int,或double; 現在一半儲存都是陣列與煉表相結合的方式。當需要在中間插入或者刪除元素時,鍊錶是更好的選擇。
三、索引:又稱為元素的位置,若有乙個元素a處於0的位置上,則稱a位於索引0處。
四、選擇排序
有了前面基礎的鋪墊,接下來就是第二中演算法:選擇排序。選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
比如你的某寶收藏夾裡放了很多想要購買的商品,對於每個商品,每瀏覽一次都會被記錄下來,最後根據你瀏覽次數最多的商品,進行排序;首先遍歷商品列表,查詢瀏覽次數最多的,排到第一位,然後再重複此過程,找出第二.....第n個商品。最後會得到乙個有序的列表,這個列表也可以幫你發現你最想購買的那個商品是什麼。
需要的總時間為
c# 實現**:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace selection
; //待排序陣列
selectsort(arr); //呼叫選擇排序函式(selectsort)
}private static void selectsort(int arr)//宣告乙個選擇排序函式,int格式
}//最後把最小的數與第一的位置交換
temp = arr[i]; //把第乙個原先認為是最小值的數,臨時儲存起來
arr[i] = arr[minindex]; //把最終我們找到的最小值賦給這一趟的比較的第乙個位置
arr[minindex] = temp; //把原先儲存好臨時數值放回這個陣列的空地方, 保證陣列的完整性
}//控制台輸出
foreach (int item in arr)
", item);}}
}}
參考blog:c#選擇排序詳解 - 張承微 - 非阻塞同步演算法
treiber 1986 棧頂為一串行 public class concurrentstackwhile top.compareandset oldhead,newhead public e pop newhead oldhead.next while top.compareandset oldh...
C 選擇排序演算法
原理 選擇排序是搜尋整個陣列,將找到的最小值與陣列中第一位元素交換位置 然後在剩下的元素中找到最小值,將找到的最小值與陣列中第二位元素交換位置,依此類推,直到將所有的元素排好順序。選擇排序,從小到大排列 public static void selectionsort 定義乙個陣列 for int ...
C 演算法 選擇排序
c 選擇排序 選擇排序的原理,第一次從陣列中選出最小的數,將它放在陣列的第一位置,第二次再從陣列中選出最小的數,將它放置在第二個位置,以後每次都選出最小的數,按照上邊的排序方式,放置在陣列中合適的位置,這樣到最後選出的數就是有序的。static void main string args 72,54...