c++类实现基本的6种排序算法
2015-08-06 19:16
447 查看
//<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 ; //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; 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
相关文章推荐
- C++ std::tr1::shared_ptr使用说明
- C语言:使用命令行参数用字符串读取流和输出流进行文本文件的复制
- 冒泡排序 选择排序 快速排序(C语言)
- C语言:字符串输出流输出文件中的数据。
- C语言:字符串读取流读取文件中的数据
- C语言:用字符读取流和输出流来读写入数据。(文本文件)
- C++ 11新特性笔记-1: 保证稳定性和兼容性
- C++_运算符重载_前缀自增与后缀自增
- TinyXML:一个优秀的C++ XML解析器
- 线型表的C++实现
- C++ Builder 将数据库数据导出到Excel中总结
- C++ Builder 基础知识总结中
- C++异常处理:抛出异常throw,捕获异常catch(...)
- C++之旅
- cppcheck值得注意的一些筛选项
- [2015.8.6]C++学习总结
- 深入理解C语言(转载)
- Qt与C语言交互探讨
- C++虚函数及虚函数表解析
- C++多重继承与虚拟继承