關於各種排序(插入,冒泡,選擇,希爾)

2021-08-09 22:47:54 字數 1867 閱讀 9783

插入排序:

能快速處理相對有序的資料,最優情況下複雜度僅僅為o(n)(即原本就是有序的數列);

#include

using

namespace

std;

const

int maxn = 100;

int num[maxn];

void insertionsort(int n)

num[j+1] = v;

}}int main()

氣泡排序:

氣泡排序是穩定排序。

首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai = aj,ai原來在位置前,排序後ai還是要在aj位置前。

其次,說一下穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個鍵上排序,第乙個鍵排序的結果可以為第二個鍵排序所用。基數排序就是這樣,先按低位排序,逐次按高位排序,低位相同的元素其順序再高位也相同時是不會改變的。另外,如果排序演算法穩定,對基於比較的排序演算法而言,元素交換的次數可能會少一些(個人感覺,沒有證實)。

#include

using

namespace

std;

const

int maxn = 100;

int num[maxn];

void bubblesort(int num,int n)

}}int main()

選擇排序:

每次選擇最小的乙個數依次從頭放

#include

using

namespace

std;

vector

ve;

int selectionsort(int n)

return times;

}int main()

int times = selectionsort(n);

for(int i=0;iif(i == n-1)

printf("%d",ve[i]);

else

printf("%d ",ve[i]);

}printf("\n%d\n",times);

}

希爾排序:

主要運用了分治法的思想,還用了插入排序在有序的數列中的高效的性質

#include

using

namespace

std;

vector

ve;

const

int maxn = 1000010;

long

long cnt = 0;

int num[maxn];

void insertionsort(int n,int g)

num[j+g] = v;

}}void shellsort(int n)

for(int i=ve.size()-1;i>=0;i--)

insertionsort(n,ve[i]);

}int main()

printf("\n");

printf("%lld\n",cnt);

for(int i=0;iprintf("%d",num[i]);

if(i != n-1)

printf("\n");

}return

0;}

關於各種排序(插入,冒泡,選擇,希爾)

插入排序 能快速處理相對有序的資料,最優情況下複雜度僅僅為o n 即原本就是有序的數列 include using namespace std const int maxn 100 int num maxn void insertionsort int n num j 1 v int main 氣泡...

冒泡 選擇 插入 希爾排序

include include include using namespace std template void print const t a,int n 氣泡排序 每次迴圈總是將最大元素移到隊尾 o n 2 穩定的排序演算法 templatevoid bubblesort t a,int n ...

陣列排序(冒泡,選擇,插入,希爾)

package org.owen public class sortall system.out.println 氣泡排序的結果 maopao i system.out.println system.out.println 選擇排序的結果 xuanze i system.out.println sy...