#include "stdafx.h"
#include <iostream>
void QuickSort(int s[], int begin, int end)
{
int i, j, pivot;
if (begin < end)
{
i = begin;
j = end;
pivot = s[i];
while (i < j)
{
while(i < j && s[j] >pivot) j--; /* 从右向左找第一个小于pivot的数 */
if(i < j) s[i++] = s[j];
while(i < j && s[i] < pivot) i++; /* 从左向右找第一个大于pivot的数 */
if(i < j) s[j--] = s[i];
}
s[i] = pivot;
QuickSort(s, begin, i-1);
QuickSort(s, i+1, end);
}
}
int main()
{
int a[10]={133,15,46,432,313,12,45,47,456,789};
QuickSort(a,0,9);
for(int i=0;i<10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
//将有二个有序数列a[first...mid]和a[mid...last]合并。
void mergearray(int a[], int first, int mid, int last, int temp[])
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{
if (first < last)
{
int mid = first+(last-first)/2;
mergesort(a, first, mid, temp); //左边有序
mergesort(a, mid + 1, last, temp); //右边有序
mergearray(a, first, mid, last, temp); //再将二个有序数列合并
}
}
bool MergeSort(int a[], int n)
{
int *p = new int[n];
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
delete[] p;
return true;
}