1. 程式人生 > 實用技巧 >TSINGSEE青犀視訊H265網頁播放器EasyPlayerPro-Win如何通過配置檔案實現自動播放等功能?

TSINGSEE青犀視訊H265網頁播放器EasyPlayerPro-Win如何通過配置檔案實現自動播放等功能?

技術標籤:演算法演算法快速排序排序演算法

007 快速排序

一、演算法介紹

快速排序是由氣泡排序改進而得的。作為目前內排序演算法中最快的排序演算法,快速排序通常明顯比時間效率同為 O(nlogn) 的其他演算法更快。其基本思想是:在待排序的n個元素中任取一個(通常取第一個)作為基準(pivot),把該元素放到適當的位置,資料序列被此元素劃分為兩部分。比該元素小的放在前一部分,大的放在後一部分,這樣基準元素就被放在了適當的位置,即歸位。然後分別再對劃分出的兩部分進行同樣的操作,直到劃分的部分只有一個元素或為空。這一過程中大樹一直在往後移,小數一直往前移,所以最終序列一定是有序的。顯然,快速排序也用到了分治的策略。因此,快速排序又稱分割槽交換排序。

二、演算法分析

在分割槽時,我們可以理解成把在首位置的元素拿出來,然後從後往前找把亂序(比基準小)的數拿出來填進去,再從前往後找把比基準大的數填到剛剛被拿來填空的數留下的空裡,一直迴圈,直到兩頭碰在一起了,這時就把基準填進去。這樣一趟排序就完成了。
如圖所示
設有一陣列a[10],取a[0],38作為基準,將其取出儲存到tmp中
空用黃色標出

0123456789
3824579116442208864

從後往前找,把遇到的第一個小於38的數 即a[7]=20取出填進去

0123456789
20245791164428864

從前往後找,把遇到的第一個大於38的數 即a[2]=57取出填入

0123456789
20249116442578864

接著從後往前找,把小於38的數 即a[5]=4取出填入

0123456789
20244911642578864

接著從前往後找,把大於38的數 即a[3]=91取出填入

0123456789
20244169142578864

接著從後往前找,把小於38的數 即a[4]=16取出填入

0123456789
20244169142578864

這時,再從前往後找,發現和後面的碰頭了,這時就可以把存放在tmp中的a[0]填進去了

0123456789
2024416389142578864

這時我們可以發現38兩邊的數是滿足要求的,第一趟排序就完成了,然後需要對兩部分進行相同的操作,直到分出的部分的元素個數為1或0

三、演算法程式碼

void QuickSort(int a[], int s, int e) //當前部分頭尾位置的索引
{
    int i=s, j=e;
    int tmp=a[s]; //取出基準
    if(s<e) //元素個數大於1
    {
        while(i<j)
        {
            while(i<j && a[j]>tmp) //從後向前找小於基準的數
                j--;
            //無須if(i<j),如果因i=j結束迴圈,a[i] = a[j]也無影響
            a[i] = a[j];
            while(i<j && a[i]<tmp) //從前向後找大於基準的數
                i++;
            a[j] = a[i];
        }
        a[i] = tmp; //i=j,前後碰頭了,就把基準填在碰頭的地方
        
        //劃分結束,對基準的前後部分再進行相同的操作
        QuickSort(a, s, i-1);
        QuickSort(a, i+1, e);
    }
}

執行結果
在這裡插入圖片描述