c 類實現基本的6種排序演算法

2021-07-04 09:28:56 字數 2730 閱讀 4511

//選擇排序、快速排序、希爾排序、堆排序是不穩定的排序演算法
//氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法
#includeusing namespace std;

class sort;

~sort(){};

void print(int arr,int size) const;

void quicksort(int arr, int left, int right) const ; //快排

void bubble(int arr, int size) const ; //冒泡

void directinsertsort(int arr, int size ) const; //直接插入

void shellsort(int arr, int size ) const ; //shell

void mergearr(int *arr,int left,int middle,int right,int *tmp) const;

void mergesort(int *arr,int left , int right, int *tmp) const ;

void mergesort(int *arr, int size) const ; //歸併

void adjustheap(int arr,int size, int i) const;

void makeheap(int arr, int size) const;

void heapsort(int arr, int size) const ; //堆排

};void sort::print(int arr, int size) const

int i = left;

int j = right;

int pivot=arr[left];

while(i!=j)

if(iarr[j])

} }}void sort::directinsertsort(int arr, int size) const

int i,j;

for(i=1;i=0 && arr[j]>arr[j+1];--j) }}

void sort::shellsort(int arr, int size) const

int gap,i,j;

for(gap=size>>1;gap>0;gap=gap>>1)

} }}void sort::mergearr(int *arr,int left,int middle,int right,int *tmp) const

while(i<=m)

while(j<=n)

for(i=0;i>1;

mergesort(arr,left,middle,tmp);

mergesort(arr,middle+1,right,tmp);

mergearr(arr,left,middle,right,tmp); }}

void sort::mergesort(int arr, int size) const

mergesort(arr,0,size-1,tmp);

delete tmp;

tmp=null;

}void sort::adjustheap(int arr,int size, int i) const

if(arr[j]<=tmp)

arr[i]=arr[j];

i=j;

j=2*i+1;

} arr[i]=tmp;

}void sort::makeheap(int arr, int n) const

}void sort::heapsort(int arr, int size) const

}

#include"sort.h"

int main() ;

int *arr1 = arr;

int size = sizeof(arr)/sizeof(int);

sort * _sort = new sort;

cout<<"after quicksort:"_sort->print(arr1,size);

arr1=arr;

cout<<"after bubblesort:"_sort->print(arr1,size);

arr1=arr;

cout<<"after directinsertsort:"_sort->print(arr1,size);

arr1=arr;

cout<<"after shellsort:"_sort->print(arr1,size);

arr1=arr;

cout<<"after mergesort:"_sort->print(arr1,size);

arr1=arr;

cout<<"after heapsort:"_sort->heapsort(arr1,size);

_sort->print(arr1,size);

system("pause");

return 1;

}

參考:

java實現6種排序演算法

典型的二分查詢 對於二分查詢演算法要求,查詢前的資料必須是已經排好序的,然後得到陣列的開始位置start和結束位置end,取中間位置mid的資料a mid 跟待查詢資料key進行比較,若 a mid key,則取end mid 1 若 a mid key,則取start mid 1 若 a mid ...

C 八種基本排序 堆排序(6)

知識擴充 完全二叉樹的特點 從作為第一層的根開始,除了最後一層之外,第n層的元素個數都必須是2的n次方 第一層2個元素,第二層4個,第三層8個,以此類推。每一行的元素都從最左邊開始安放 生成的順序是從上往下,從左往右 兩個元素之間不能有空閒 堆的性質 小根堆與大根堆的定義 堆排序原理 堆頂元素 即二...

6種排序演算法

氣泡排序 選擇排序 歸併排序 快速排序 堆排序插入排序,顧名思義肯定是已插入為主,將待排序的陣列分為已排序 陣列前部分 和未排序 陣列後部分 這裡我們已從小到大排序,陣列為num 0 end 剛開始排序時,固定第乙個數num 0 為已經排序好的數,從第二個數num 1 開始,從後往前比較已排序中的資...