內排序演算法

2021-08-17 22:38:44 字數 1701 閱讀 7347

每次需要排序的時候總是會忘記基本的排序演算法,為了防止自己再次忘記,寫個部落格加深自己的印象:

簡單選擇排序大概就是最簡單我們最容易想到的一種排序方法,一共進行n-1次選擇,在第i次選擇中選擇第i小的數放在相應的位置。我們可以想象一種場景,有一些賬單需要我們按照時間進行排序,我媽每次選擇最早的一張拿在手上,再從剩下的賬單裡選擇最早的放在手中賬單的底下。

static

class selectsort

}if(min!=i)}}

}

每次選擇出乙個第i小的數放在正確的位置會發生交換,導致元素位置改變,所以是不穩定的。

插入排序我們可以想象我們在玩撲克牌,每次從牌堆中拿一張,根據牌面的大小插入手中的牌。

static

class insertionsort

array[i+1]=key;}}

}

快速排序的重點就在劃分,我們選擇乙個標準元素,然後讓它左邊的元素都小於它,右邊的元素都大於它。接著進行遞迴處理它左邊的所有元素和右邊的所有元素。

static

class quicksort

}static

int partition(int array,int p,int q)

}exchange(array,++i,q);//交換元素i+1和q

return i;

}}

在劃分的過程中存在交換,因此會打亂相同元素相對順序。

每次比較相鄰的元素,如果左邊的元素比右邊的元素大,那麼就會交換位置,所以每一輪排序都會把最大的數放在正確的位置。

static

class bubblesort}}

}}

開始將陣列分為長度為1的n個有序表,然後逐步合併。

static

class mergesort}}

static

void merge_pass(int array,int array1,int h)

if(i}

}static

void merge(int array,int array1,int a,int b,int c)else

}while(i<=b)array1[k++]=array[i++];

while(j<=c)array1[k++]=array[j++];

}}

對直接插入排序的一種改進,因為基本有序的序列,直接插入最快,記錄數很少的無序序列插入也很快。將待排序的記錄集分成多個子集,分別對這些子集進行插入排序。

static

class shellsort

array[j+d]=key;}}

}}

}

演算法名稱

穩定性演算法複雜度

簡單選擇排序

不穩定o(n^2)

插入排序

穩定最壞情況下o(n^2)

快速排序

不穩定平均情況o(n*log2(n)),最壞情況o(n^2)

希爾排序

不穩定o(n*log2(n))到o(n^2)

氣泡排序

穩定最壞情況o(n^2)

歸併排序

穩定o(n*log2(n))

穩定性是指在排序完成之後相同值的元素的相對位置不會改變*

內排序演算法比較

datastructure1.cpp 定義控制台應用程式的入口點。include stdafx.h include include includeusing namespace std define maxsize 4000 可排序表的最大長度 define sortnum 6 測試6中排序方法 d...

內排序演算法總結 快速排序

快速排序 快速排序是一種在含n個數的輸入陣列上最壞情況執行時間為o n2 的演算法,平均效能的期望執行時間為o nlgn 且o nlgn 記號中隱含的常數因子很小。另外,它還能夠進行原地置換排序。快速排序是基於分治模式上的,分治過程三個步驟 1.分解 把陣列a p.r 分成兩個非空子陣列a p.q ...

基礎複習 內排序 查詢演算法

內排序void mkarr int arr,int size void checksorted int arr,int size,int flag else printf all right n 1.插入排序 假設陣列的前i個數已經排好序,然後將第i 1個數插入到前i個中,只到n個數都插入到自己的位...