排序应该是基础,要经常写,熟练使用递归。方法贴在这里,以后时刻温习
#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;
}