排序算法实现总结
2017-06-29 10:11
288 查看
以下是我总结的对于各个算法较好的实现
参考文章:
1.http://blog.jobbole.com/11745/
2.http://www.cnblogs.com/eniac12/p/5329396.html#s4
3.http://blog.csdn.net/xiazdong/article/details/8462393
4.http://blog.csdn.net/hguisu/article/details/7776068/
一、快速排序实现
1.实现1(转载):#include <iostream> using namespace std; void Qsort(int a[], int low, int high) { if(low >= high) { return; } int first = low; int last = high; int key = a[first];/*用字表的第一个记录作为枢轴*/ while(first < last) { while(first < last && a[last] >= key) { --last; } a[first] = a[last];/*将比第一个小的移到低端*/ while(first < last && a[first] <= key) { ++first; } a[last] = a[first]; /*将比第一个大的移到高端*/ } a[first] = key;/*枢轴记录到位*/ Qsort(a, low, first-1); Qsort(a, first+1, high); } int main() { int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}; Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1); /*这里原文第三个参数要减1否则内存越界*/ for(int i = 0; i < sizeof(a) / sizeof(a[0]) -1; i++) { cout << a[i] << ","; } cout<<a[sizeof(a)/sizeof(a[0])-1]<<endl; return 0; }/*参考数据结构p274(清华大学出版社,严蔚敏)*/
二、归并排序实现
1.实现1(转载):#include <iostream> #include <limits.h> using namespace std; void merge(int* pArray,int left,int middle,int right) { int n1=middle-left+1; int n2=right-middle; int* L=new int[n1+1]; int* R=new int[n2+1]; L[n1]=INT_MAX;// 使用无穷大作为哨兵值放在子数组的末尾 R[n2]=INT_MAX;// 这样可以免去检查某个子数组是否已读完的步骤 for(int i=0;i<n1;i++) L[i]=pArray[left+i]; for(int j=0;j<n2;j++) R[j]=pArray[middle+j+1]; int i=0,j=0; for(int k=left;k<=right;k++) { if(L[i]<=R[j]) { pArray[k]=L[i]; i++; } else { pArray[k]=R[j]; j++; } } } void mergeSort(int* pArray,int left,int right) { int middle = (left+right)/2; if(left<right) { mergeSort(pArray,left,middle); mergeSort(pArray,middle+1,right); merge(pArray,left,middle,right); } } void printArray(int* pArray,int len) { for(int i=0;i<len-1;i++) cout<<pArray[i]<<","; cout<<pArray[len-1]<<endl; } int main() { int array[]={49,38,65,97,76,13,27,49}; int arrlen = sizeof(array)/sizeof(int); cout<<"original array len:"<<arrlen<<endl; printArray(array,arrlen); //maopao(array,arrlen); //quickSort(array,0,arrlen-1); //newQuickSort(array,0,arrlen-1); mergeSort(array,0,arrlen-1); printArray(array,arrlen); return 0; }
参考文章:
1.http://blog.jobbole.com/11745/
2.http://www.cnblogs.com/eniac12/p/5329396.html#s4
3.http://blog.csdn.net/xiazdong/article/details/8462393
4.http://blog.csdn.net/hguisu/article/details/7776068/
相关文章推荐
- 各种排序算法及其实现总结
- 各种排序算法及其实现总结
- <数据结构>各种排序算法的实现与总结(一)
- 排序算法(C实现)------- 总结
- 【数据结构】排序算法总结及php排序算法实现代码(伪代码见 http://blog.sina.com.cn/s/blog_676a011e0100ty5o.html)
- 总结一些排序算法的原理和实现
- 各种排序算法总结及C#代码实现
- 排序算法总结-C语言实现
- 排序算法总结与java实现
- 7大排序算法总结 JS 实现
- 各种排序算法及其实现总结
- linux c 实现八大排序算法总结
- 常见排序算法总结及C语言实现
- 排序算法总结-python实现
- 剑指offer:排序算法实现经验教训总结
- 各种排序算法及其实现总结
- 总结java实现八大排序算法及之间的关系
- 总结几种排序算法的Java实现
- 7种排序算法的实现及分析总结
- 8大排序算法总结 JS 实现