//選擇排序、快速排序、希爾排序、堆排序是不穩定的排序演算法
//氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法
#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 開始,從後往前比較已排序中的資...