資料結構與演算法 交換排序

2021-10-06 06:02:36 字數 1275 閱讀 8758

在處理資料的演算法當中,有幾種排序的方法:出入排序、交換排序和選擇排序。這幾種的排序方法中都各有特點。下面我們就來說一下當中的一種——交換排序。

了解一種演算法,最基本的就是先從它的概念入手。它的基本思想是,在乙個待排序的序列的記錄中,任取乙個值為基準記錄,然後就以這個基準記錄為這個序列的界限,將待排序的序列當中劃分成兩個子串行,裡面的序列記錄小於基準記錄的就往左邊排序,大於基準記錄的就往右邊排序。由於只是把開始的序列排好了,之後就開始把那劃分之後的兩個子排序進行以此類推的方法進行排序。直到每個子串行當中只有乙個序列,看上去是有順序進行展示的。

感知這個交換排序的基本思想之後,下面就通過**進行介紹一下。

首先我們先定義乙個序列,對於序列r從i到j的範圍進行排序。按照上面介紹到的基本思想進行排序,選擇第i個記錄作為基準記錄,然後就對這個基準記錄進行乙個備份。

備份之後,我們就來開始對序列裡面的記錄值進行與基準記錄進行對比。因為在乙個待排序的序列當中,每個值都是不分大小,散亂分布的,所以就分兩種情況進行處理。

第一當i

第二種的方式就是當r[i].key的值小於r[0].key的基準值,就把這個值排在基準值的左邊,然後以開頭i值為起點,從左往右進行i++進行尋找,當找到的r[i]的值與r[j]的基準記錄相等。進行轉換第一種方式的查詢。

最後按照基準記錄的「左小右大」的順序排好之後,就把基準記錄的值返回到序列的原來位置。

上面的父序列已經排序好了,之後就開始排兩個子串行了。對於子串行的排序,我們就採用排序當中的遞迴演算法。

將父序列劃分為左右區間的兩個子串行,左區間是從r到l的範圍,右區間則是從r到h的範圍。k則為父序列的基準值,在上面排好序之後就返回的值。所以左區間的排序就是l到k-1之間進行排序;右區間是從k+1到h之間排序。

經過以上的排序處理,乙個有序序列的排序操作就基本完成了。下面來看一下實際例子的效果圖(待排序列為29、07、47、53、21、36、98、16)

資料結構與演算法 交換排序

很簡單的一種排序,很容易理解,時間複雜度為o n 2 空間複雜度為o 1 穩定的排序 基本思想 其實就是從頭開始對整個陣列裡面的元素進行兩兩對比,比較大的元素放到後面,接著進行對比,知道最大的乙個元素被提取出來放到整個陣列的最後。然後再對剩下的元素進行相同的操作,直到整個陣列被排序完成。實現 pub...

資料結構 交換排序

交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,如果發生逆序 即排列順序與排序後的次序正好相反 則交換之,直到所有記錄都排好序為止。基本思路 每趟不斷將記錄兩兩比較,並按 前小後大 或 前大後小 規則交換。優點 每趟結束時,不僅能擠出乙個最大值到最後面位置,還能同時部分理順其他元素 一旦下趟沒有交...

資料結構 排序之交換排序

本節將兩種交換排序氣泡排序和快速排序 氣泡排序是最簡單的交換排序方法,比較相鄰兩個記錄的關鍵字,將大的放到右邊,小的放到左邊,如圖所示 從而使關鍵字小的左移 大的右移 每一次迴圈最右邊的必定是關鍵字最大的元素,外面再加一層迴圈即可得到有序序列。實現 include using namespace s...