#include<iostream>
using namespace std;
int getMid(int data[], int start, int end)
{
int mid = (start + end) / 2;
if (data[start] > data[mid])
{
if (data[mid] > data[end])
return mid;
else if (data[start] > data[end])
return end;
else
return start;
}
else
{
if (data[mid] < data[end])
return mid;
else if (data[start] < data[end])
return end;
else
return start;
}
}
int partition(int data[], int start, int end)
{
int mid = getMid(data, start, end);
int temp = data[mid];
data[mid] = data[start];
data[start] = temp;
mid = start;
int i = start + 1;
int j = end;
while (i < j)
{
if (data[i] < temp) ++i;
if (data[j] > temp) --j;
if (data[i] >= temp&&data[j] <= temp)
{
data[i] = data[i] + data[j];
data[j] = data[i] - data[j];
data[i] = data[i] - data[j];
++i;
--j;
}
}
if (i = j)
{
temp = data[i];
data[i] = data[start];
data[start] = temp;
}
if (i > j)
{
--i;
temp = data[i];
data[i] = data[start];
data[start] = temp;
}
return i;
}
void quickSort(int a[], int start, int end)
{
if (start == end) return;
int par = partition(a, start, end);
if (par<start||par>end) return;
quickSort(a, start, par - 1);
quickSort(a, par + 1, end);
}
int main()
{
int length = 0;
while (cin >> length)
{
int*a = new int[length];
for (int i = 0; i < length; ++i)
cin >> a[i];
quickSort(a, 0, length - 1);
for (int j = 0; j < length; ++j)
{
if (j != length - 1)
{
cout << a[j] << " ";
}
else
{
cout << a[j];
}
}
}
system("pause");
return 0;
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布