1. 程式人生 > 實用技巧 >學習專案-前端-第六課:ElementUI: modify

學習專案-前端-第六課:ElementUI: modify

第八章主要學習排序的相關演算法。

通過這章,瞭解到有很多比較好的排序方式,這章也比較強調對演算法儲存結構的理解,對演算法的編寫要求不是太大。

1、從插入排序來說

  主要講了直接插入排序和折半插入排序,希爾排序的話也瞭解了一下。插入排序的關鍵是“比較”和“後移”。比較就是對數的比較,基於要求進行升序或降序排列。後移就是在比較成功後預留位置去插入。

  演算法的特點:它是穩定的排序,但是當資料量比較大的時候,演算法的時間複雜度過高。

2、對交換排序來說

  主要介紹了氣泡排序和快速排序。其中這裡的重點是快速排序。

  氣泡排序簡單來說就是每次確定一個元素的最終位置,比如說按升序排序的話,每次迴圈結束都將最大的元素推到最後。

  **快速排序:快排是非常重要的,所以我也自己去研究了下演算法。

int Partition(int *a,int low,int high){
    a[0]=a[low];/*更新位置*/
    while(low<high){
        /*從末端開始查詢*/
        while(low<high&&a[high]>=a[0]){
            high--;
        }
        a[low]=a[high];
        
        while(low<high&&a[low]<=a[0
]){ low++; } a[high]=a[low]; } a[low]=a[0];/*該元素的最終位置*/ return low; }
View Code
void QSort(int *a,int low,int high){
    if(low<high){
        int pos=Partition(a,low,high);/*獲得中樞位置*/
        QSort(a,low,pos-1);
        QSort(a,pos+1,high);    
    }
}
View Code

  快排在最壞的情況下會退化為O(n²)的時間複雜度(原序列有序的時候)

 

3、選擇排序

  簡單選擇排序其實在上學期學過了,其實就是比較+交換的過程,演算法的話也比較熟悉了。

  這一小節的重點是堆排序。堆排序的引出是為了解決簡單選擇排序時間複雜度比較大的問題。

  堆排序包括建初堆和調整堆兩大步驟。其中堆的概念需要明白。最大堆是指根節點的值不小於其左右結點,最小堆是指根節點的值不大於其左右結點。

4、最後就是歸併排序了

  歸併排序是將多個有序的序列合併到一起。在前面的章節中也有提及到這個概念。歸併排序是穩定的排序。歸併排序的主要作用在於解決外排序資料量超過記憶體大小的問題,它可以分塊進行分塊記錄。