您的位置:首页 > 其它

手写快速排序和归并排序

2017-12-26 20:54 429 查看
排序应该是基础,要经常写,熟练使用递归。方法贴在这里,以后时刻温习

#include<cstdio>

void quicksort(int a[],int low,int high)
{
if(low>=high)  return;
int key = a[low];
int first = low;
int last = high;
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];
printf("%d %d\n",first,last);
}
a[first] = key;
quicksort(a,low,first-1);
quicksort(a,first+1,high);
}

void Merge(int sourceArray[],int tempArray[],int s,int mid,int t)
{
int i = s ;
int j = mid+1;
int k = s;
while(i<=mid&&j<=t)
{
if(sourceArray[i]<=sourceArray[j])  tempArray[k++] =  sourceArray[i++];
else tempArray[k++]  = sourceArray[j++];
}
while(i<=mid)  tempArray[k++]  = sourceArray[i++];
while(j<=t)    tempArray[k++]  = sourceArray[j++];
for(i=s;i<=t;i++)  sourceArray[i] = tempArray[i];
}

void MergeSort(int sourceArray[],int tempArray[],int s,int t)
{
if(s<t)
{
int mid = (s+t)>>1;
MergeSort(sourceArray,tempArray,s,mid);
MergeSort(sourceArray,tempArray,mid+1,t);
Merge(sourceArray,tempArray,s,mid,t);
}
}

int main()
{
int a[] = {10,2,3,4,9,8,6,14,12,32132,121342,424231,311,32132,3232};
// quicksort(a,0,7);
int b[100];
MergeSort(a,b,0,14);
for(int i=0;i<15;i++)  printf("%d ",a[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: