c++类实现基本的6种排序算法

来源:互联网 发布:sqlserver 注释快捷键 编辑:程序博客网 时间:2024/06/06 10:50
//<span style="margin: 0px; padding: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px; background-color: rgb(245, 245, 245);">选择排序、快速排序、希尔排序、堆排序是不稳定的排序算法</span>
<span style="margin: 0px; padding: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 19.5px; background-color: rgb(245, 245, 245);">//冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法</span>
#include<iostream>using namespace std;class SORT{public: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 ;              //shellvoid 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;for( i = 0; i < size; ++i ) {cout<<arr[i]<<"  ";}cout<<""<<endl;}void SORT::quickSort(int arr[], int left, int right ) const {if(left>=right) {return ;}int i = left;int j = right;int pivot=arr[left];while(i!=j) {while(i<j && pivot<arr[j]) {--j;}if(i < j) {arr[i++]=arr[j];}while(i<j && pivot>arr[i]) {++i;}if(i<j) {arr[j--]=arr[i];}
         }arr[i]=pivot;;quickSort(arr,left,i-1);quickSort(arr,i+1,right);}void SORT::bubble(int arr[], int size) const {if(size<=0){return ;}int i,j;for(i=0; i<size;++i) {for(j=1;j<size-i;++j) {if(arr[j-1]>arr[j]) {int tmp = arr[j];arr[j] = arr[j-1];arr[j-1] = tmp;}}}}void SORT::directInsertSort(int arr[], int size) const {if(size<=0) {return;}int i,j;for(i=1;i<size;++i) {for(j=i-1;j>=0 && arr[j]>arr[j+1];--j) {int tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}void SORT::shellSort(int arr[], int size) const {if(size <=0 ){return;}int gap,i,j;for(gap=size>>1;gap>0;gap=gap>>1) {for(i=gap;i<size;++i) {for(j=i-gap;j>=0 && arr[j]>arr[j+gap];j-=gap) {int tmp=arr[j];arr[j]=arr[j+gap];arr[j+gap]=tmp;}}}}void SORT::mergeArr(int *arr,int left,int middle,int right,int *tmp) const {int i=left;int j=middle+1;int m=middle;int n=right;int k=0;while(i<=m && j<=n) {tmp[k++]=(arr[i]<=arr[j]?arr[i++]:arr[j++]);}while(i<=m){tmp[k++]=arr[i++];}while(j<=n) {tmp[k++]=arr[j++];}for(i=0;i<k;++i) {arr[left+i]=tmp[i];}}void SORT::mergesort(int *arr,int left , int right, int *tmp) const {if(left<right) {int middle=(left+right)>>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 {int * tmp = new int[size];if(NULL==tmp) {exit(-1);}mergesort(arr,0,size-1,tmp);delete [] tmp;tmp=NULL;}void SORT::adjustHeap(int arr[],int size, int i) const{int j=(2*i)+1;int n=size;int tmp=arr[i];while(j<n) {if(j+1<n && arr[j+1]>arr[j]) {++j;}if(arr[j]<=tmp) {break ;}arr[i]=arr[j];i=j;j=2*i+1;}arr[i]=tmp;}void SORT::makeHeap(int arr[], int n) const {int i;for(i=n/2-1;i>=0;--i) {adjustHeap(arr,n,i);}}void SORT::heapSort(int arr[], int size) const {int i;for(i=size-1;i>0;--i) {int tmp = arr[0];arr[0]=arr[i];arr[i]=tmp;adjustHeap(arr,i,0);}}

#include"sort.h"int main() {int arr[] = {1,3,5,2,4,12};int *arr1 = arr;int size = sizeof(arr)/sizeof(int);SORT * _sort = new SORT;cout<<"after quicksort:"<<endl;_sort->quickSort(arr1,0,size-1);_sort->print(arr1,size);arr1=arr;cout<<"after bubblesort:"<<endl;_sort->bubble(arr1,size);_sort->print(arr1,size);arr1=arr;cout<<"after directInsertSort:"<<endl;_sort->directInsertSort(arr1,size);_sort->print(arr1,size);arr1=arr;cout<<"after shellSort:"<<endl;_sort->shellSort(arr1,size);_sort->print(arr1,size);arr1=arr;cout<<"after mergeSort:"<<endl;_sort->mergeSort(arr1,size);_sort->print(arr1,size);arr1=arr;cout<<"after heapSort:"<<endl;_sort->makeHeap(arr1,size);_sort->heapSort(arr1,size);_sort->print(arr1,size);system("pause");return 1;}
</pre><pre name="code" class="cpp">参考:
http://blog.csdn.net/MoreWindows/article/category/859207
0 0