64,282
社区成员
发帖
与我相关
我的任务
分享
for(size_t i = 0; i < Size; ++i)
cout << ival[i] << " ";
cout << endl << "After sorted:\n";
SortQui(ival, 0, Size);
for( i = 0; i < Size; ++i)
cout << ival[i] << " ";
cout << "Done!" << endl;
SortQui(ival, 0, Size);
for( i = 0; i < Size; ++i)
cout << ival[i] << " ";
cout << "Done!" << endl;
void SortQui(int a[], int begin, int end)
{
int low = begin, high = end - 1;
while(low < high) //第一处
{
int Keynum = Midnum(a[low], a[high], a[(low + high) / 2]);
if(Keynum == a[high])
{
a[high] = a[low];
a[low] = Keynum;
}
else if(Keynum == a[(low + high) / 2])
{
a[(low + high) / 2] = a[low];
a[low] = Keynum;
}
if(low < high) //第二处
{
while(low < high && a[high] >= Keynum)
--high;
a[low++] = a[high];
while(low < high && a[low] <= Keynum)
++low;
a[high--] = a[low];
}
a[low] = Keynum;
SortQui(a, begin, low);
SortQui(a, low, end);
}
}
#include <iostream>
const int Size = 12;
const int size = 3;
int Midnum(int a, int b, int c);//选出三个数中中间那个
void SortQui(int a[], int begin, int end);//快速排序
int main()
{
using namespace std;
int ival[Size] = {18, 4, 20, 3, 65, 37, 45, 99, 32, 12, 2, 23};
cout < < "Before sorted:\n";
for(size_t i = 0; i < Size; ++i)
cout < < ival[i] < < " ";
cout < < endl < < "After sorted:\n";
SortQui(ival, 0, Size);
for(size_t i = 0; i < Size; ++i)
cout < < ival[i] < < " ";
cout < < "Done!" < < endl;
return 0;
}
int Midnum(int a, int b, int c)
{
int temp[size] = {a, b, c};
int tempval;
for(size_t i = size - 1; i > 0; --i)
for(size_t j = 0; j < i; ++j)
{
if(temp[j] > temp[j + 1])
{
tempval = temp[j];
temp[j] = temp[j + 1];
temp[j + 1] = tempval;
}
}
return temp[2];
}
void SortQui(int a[], int begin, int end)
{
int low = begin, high = end - 1;
if(low < high)
{
int Keynum = Midnum(a[low], a[high], a[(low + high) / 2]);
if(Keynum == a[high])
{
a[high] = a[low];
a[low] = Keynum;
}
else if(Keynum == a[(low + high) / 2])
{
a[(low + high) / 2] = a[low];
a[low] = Keynum;
}
while(low < high)
{
while(low < high && a[high] >= Keynum)
--high;
a[low++] = a[high];
while(low < high && a[low] <= Keynum)
++low;
a[high--] = a[low];
}
a[low] = Keynum;
SortQui(a, begin, low);
SortQui(a, low + 1, end);
}
}