常用排序演算法總結

2021-10-12 17:50:06 字數 4814 閱讀 5539

// 11類常用演算法**實現

//#include

#include

using

namespace std;

//1.直接插入排序 o(n^2)

template

<

class

t>

void

insert

(vector

* a)

(*a)

[j +1]

= tmp;}}

}//2.折半插入排序

template

<

class

t>

void

binsert

(vector

* a)

// 有序表中插入位置後的元素都後移一步

for(

int j = i; j > low; j--)(

*a)[j]=(

*a)[j -1]

;(*a)[low]

= tmp;}}

}//3. 2路插入排序

template

<

class

t>

void

insert2

(vector

* a)

elseif(

(*a)

[i]> d[end]

)else

d[(k + n)

% n]=(

*a)[i]

; end =

(end +

1+ n)

% n;}}

for(

int i =

0; i < n; i++)}

template

<

class

t>

void

printans

(vector a)

template

<

class

t>

void

swap

(t* a, t* b)

//4.氣泡排序

template

<

class

t>

void

bubble

(vector

* a)}if

(flag)

break;}

}// 分割操作

template

<

class

t>

intpartition

(vector

* a,

int low,

int high)

swap(&

(*a)

[low],&

(*a)

[high]);

while

(low < high &&

(*a)

[low]

<= pivot)

swap(&

(*a)

[low],&

(*a)

[high]);

}return low;

}template

<

class

t>

void

qsort

(vector

* a,

int low,

int high)

}//6.快排

template

<

class

t>

void

qsort

(vector

* a)

//找最小值所在下標

template

<

class

t>

intminidx

(vector

* a,

int idx)

return min;

}//7.選擇排序

template

<

class

t>

void

selectsort

(vector

* a)

}template

<

class

t>

intselectmin

(vector

*a, vector<

int> record)

int n = record.

size()

; vector<

int> halfrecord;

n = n /2;

int tmp;

for(

int i =

0; i < n; i++

) halfrecord.

push_back

(tmp);}

if(record.

size()

%2==1

)return

selectmin

(a, halfrecord);}

// 8.樹型選擇排序

template

<

class

t>

void

treesort

(vector

* a)

for(

int i =

0; i <

(*a)

.size()

; i++)}

template

<

class

t>

void

adjust

(vector

* a,

int s,

int n)

(*a)

[s]= rc;

}//9.堆排序

template

<

class

t>

void

heapsort

(vector

* a)

//調整剩餘元素構建乙個新堆

for(

int i =

(*a)

.size()

-1; i >=

0; i--)}

//10.歸併排序

template

<

class

t>

void

mergesort

(vector

* a,

int lo,

int hi,

int mid)

i = lo;

// 左半邊

j = mid +1;

// 右半邊

for(k = lo; k <= hi; k++

)else

if(j > hi)

// 只有左半邊有用

else

if(tmp[i - lo]

> tmp[j - lo]

)// 右邊更小

else

// 左邊更小}}

template

<

class

t>

void

mergesort

(vector

* a,

int lo,

int hi)

template

<

class

t>

void

mergesort

(vector

* a)

//11.基數排序

template

<

class

t>

void

distruib

(vector

* a,

int digit)

// 分配和收集演算法

int idx =0;

for(

auto vec : tmp)}}

template

<

class

t>

intmaxdigit

(vector

* a)

// 最大位數

int ret =0;

while

(maxelem >0)

return ret;

}template

<

class

t>

void

radixsort

(vector

* a)

return;}

intmain()

; vector<

int> arrdirinser

;//1.

//insert(&arrdirinser);

//binsert(&arrdirinser);

//insert2(&arrdirinser);

//bubble(&arrdirinser);

//qsort(&arrdirinser);

//selectsort(&arrdirinser);

//treesort(&arrdirinser);

//heapsort(&arrdirinser);

//mergesort(&arrdirinser);

radixsort

(&arrdirinser)

;printans

(arrdirinser)

; std::cout <<

"hello world!\n"

;}

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...

常用排序演算法總結

常用排序演算法總結 選擇排序 對於長度為n的陣列,選擇排序需要大約n2 2詞比較和n次交換。插入排序 對於隨機排列的長度為n且主鍵不重複的陣列 1 平均情況下,需要 n2 4次比較以及 n2 4次交換。2 最壞情況下,需要 n2 2次比較以及 n2 2次交換 3 最好情況下,需要n 1次比較以及0次...

常用排序演算法總結

注 所有排序都是寫的由小到大排序的情況 1.插入排序 1 直接插入排序 穩定 arr sortedindex 1 key 注意這裡的下標 sortedindex 1 2 希爾排序 不穩定 希爾排序好的增量序列的共同特徵 希爾排序演算法 fromid 1801475 type syn 最後乙個增量必須...