C 實現常見排序演算法

2021-05-28 15:11:48 字數 1964 閱讀 9821

本程式參考了網上各位大牛和資料結構中的程式,vs2005執行通過,如有問題,請各位大牛指正。

實現的排序有:直接插入排序、折半插入排序、希爾排序、氣泡排序、快速排序、選擇排序、堆排序等等

#include using namespace std;

const int len = 100;

class csort

;csort::csort():length(len)

arr[j+1]=key;

} }}class binsertsort : public csort

;void binsertsort::sort()

else

}//找到應該插入的位置high+1,之後移位置

int key = arr[i];

for (int j=i-1;j>=high+1;j--)

//已經找到位置,把要排序的數放入其中

arr[high+1]=key; }}

class cshellinsert : public csort

;void cshellinsert::sort()//呼叫希爾排序

;//設定希爾排序的增量,呼叫希爾排序函式

for (int i=0;i<3;i++) }

void cshellinsert::shellinsert(int dk)//希爾排序函式,把直接插入排序中的1變成dk就好,直接插入排序中增量為1

arr[j+dk]=key;

} }}/*氣泡排序*/

class bubblesort:public csort

;void bubblesort::sort()

} }}/*快速排序*/

class cquicksort:public csort

;void cquicksort::sort()

int cquicksort::partition(int low,int high)

for (int j=length-1;j>0;j--) }

//要從小到大排序:建立大根堆,把頂端元素(陣列中第乙個元素)和陣列中 最後乙個未排 元素交換

//s表示調換的位置,m表示未排好序列的個數

void cheapsort::heapadjust(int s,int m)//調整推,變成大根堆

arr[s]=arr[i];

s=i;//這時,s應該指向剛剛調過去的位置,因為,在調整時,總是從上而下進行的,要從他的左孩子開始

} arr[s]=key;

}/*歸併排序*/

class cmergingsort:public csort

;void cmergingsort::sort()

void cmergingsort::mergesort(int left,int right)

else

}while(i<=mid)

while(j<=right)

for (i=0,k=left;k<=right;k++,i++)//歸併後的陣列對應的原來的陣列是 left--right 那段,因此還要把這段資料放到原陣列中

delete temp;

}int main()

{ csort *pcsort;//執行這條**時,是不呼叫類csort的建構函式的

//pcsort = new cinsertsort();//直接插入排序

//pcsort = new binsertsort();//測試折半插入

//pcsort = new cshellinsert();//測試希爾排序

//pcsort = new bubblesort();//氣泡排序

//pcsort = new cquicksort();//快速排序

//pcsort = new cselectionsort();//選擇排序

pcsort = new cmergingsort();//堆排序

cout<<"排序前:"cout<<"排序後:"<

C 實現常見排序演算法

本程式參考了網上各位大牛和資料結構中的程式,vs2005執行通過,如有問題,請各位大牛指正。實現的排序有 直接插入排序 折半插入排序 希爾排序 氣泡排序 快速排序 選擇排序 堆排序等等 include using namespace std const intlen 100 class csort ...

幾種常見的排序演算法c 實現

一 選擇排序 演算法思想 對於有n個元素的陣列,一共有n躺排序,每趟排序要保證前i ii項元素已經排好序,對於第i ii趟排序,從第i ii個元素開始遍歷陣列,將當前遍歷元素中最小的值與第i個元素交換。具體 實現如下 include include include using namespace s...

常見排序演算法 C

時間複雜度o n 2 原地,穩定.void bubble sort vector int nums if flag break 如果沒有交換說明已經有序,跳出迴圈 return 時間複雜度o n 2 原地,穩定.void insert sort vector int nums nums i 1 va...