需要默寫的一些排序演算法

2022-02-27 13:31:30 字數 3760 閱讀 6146

/*

演算法思想:在參加排序的序列中任意選擇乙個元素(通常稱為分界元素或基準元素),把小於或等於

分界元素的所有元素都移到分界元素的前面,把大於分界元素的所有元素都移到分界元素的後面,

這樣,當前參加排序的序列就被劃分成前後兩個子串行,其中前乙個子串行中的所有元素都小於後

乙個子串行的所有元素,並且分界元素正好處於排序的最終位置上。然後分別對這兩個子串行遞迴

地進行上述排序過程,直到所有元素都處於排序的最終位置上,排序結束。

*/#include

#include

#include

#include

#include

using

namespace

std;

//輸出結果

void printdata(vectora);

//將 pivot左邊的數都小於他,右邊的數都大於他

int partition(vector& a, int low, int

high)

//此時, pivot左邊的資料都小於他,右邊的資料都大於他

a[low] =pivot;

//返回樞紐值位置

return

low;

}void qsort(vector& a, int low, int

high) }

//啟動程式

void quicksort(vector& a, int

size)

void printdata(vectora)

cout

<}int

main()

; unsigned n =a.size();

//插入排序

quicksort(a, n);

return0;

}

#include #include 

#include

#include

#include

using

namespace

std;

void printdata(vectora)

cout

<調整為大頂堆

void heapadjust(vector& a, int low, int

high)

if (tmp < a[child])

else

} a[low] = tmp; //

將父親結點 插入 到比他大的 孩子結點位置.}//

沒有使用傳引用,不改變 a

void heapsort(vector& a, int

n)

for (int j = n - 1; j > 0; j--)

printdata(a);}

intmain()

; unsigned n =a.size();

//插入排序

heapsort(a, n);

return0;

}

不懂可以看這個:

#include #include 

using

namespace

std;

int test[100] = ;

void merge(int *test, int lo, int mid, int

hi);

void mergesort(int *test, int lo, int

hi)

//歸併---o(nlogn), t(n) = 2t(n/2) + o(n)

void merge(int *test, int lo, int mid, int

hi)

deleteb;}

intmain()

;

mergesort(test,

0, 13

);

for (int i = 0; i < 13; i++)

cout

<< test[i] << "";

cout

}

#include #include 

#include

#include

using

namespace

std;

void printdata(vectora)

cout

<沒有使用傳引用,不改變 a

void insertsort(vector a, int

n) a[j + 1] =temp; }}

printdata(a);}//

折半插入排序, 只是使用折半查詢的方法來尋找插入位置

void bininsertsort(vector a, int

n)

else

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

a[low] =tmp;

}printdata(a);}

intmain()

; unsigned n =a.size();

//插入排序

insertsort(a, n);

//折半插入排序

bininsertsort(a, n);

return0;

}

#include #include 

#include

#include

#include

using

namespace

std;

void printdata(vectora)

cout

<沒有使用傳引用,不改變 a

void choosesort(vector a, int

size)

} //如果假設的最小的下標改變了,就將最小下標位置元素

//與 i 位置交換,則 i 為當前位置最小的元素

if (i !=min)

}printdata(a);}

intmain()

; unsigned n =a.size();

//插入排序

choosesort(a, n);

return0;

}

#include #include 

#include

#include

#include

using

namespace

std;

void printdata(vectora)

cout

<沒有使用傳引用,不改變 a

void bubblesort(vector a, int

n) }

//一次交換都沒有,說明已經沒有逆序對,則已經有序,直接退出迴圈!

if(ordered)

}printdata(a);}

intmain()

; unsigned n =a.size();

//插入排序

bubblesort(a, n);

return0;

}

演算法 一些線性排序演算法

一 計數排序 使用這個演算法有乙個前提,待排序的陣列a,其所有的元素分布在區間 0,k 該演算法的時間複雜度為o n k 當k o n 時,執行時間為o n 所以當k比較小的時候適合採用這個演算法 下面給出這個演算法實現的 include using namespace std void count...

一些重要的排序演算法

void pigeonholesort byte array,intlength int i,k,j 0 for i 0 i length i b array i for i 0 i 256 i for k 0 k b i k array j i 多一次遍歷的計數排序,排序位元組串的話速度約是鴿巢排...

一些常用的排序演算法

排序演算法 插入排序 直接插入排序 折半排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 分配排序 箱排序 基數排序 author kevin public class sorting else break 折半排序,降序 在乙個有序的子檔案中,用折半查詢方法查...