您的位置:首页 > 其它

排序算法实现总结

2017-06-29 10:11 288 查看
以下是我总结的对于各个算法较好的实现

一、快速排序实现

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息