快速排序,这个说它的思想很简单分治法,但是重点在他的那个不借助任何外在的数组移动调整数组中所有的元素(两个指针移动)
我贴上我的代码集截图:
#include <iostream>
#include <fstream>
using namespace std;
class QuickSort
{
public:
QuickSort();
~QuickSort();
int patition(int begin, int end);
void qSort(int begin, int end);
void output();
int arraySize;
private:
int * qsArr;
};
QuickSort::QuickSort()
{
int count = 0;
int sz = 0;
cout << "输入数组的大小:" << endl;
cin >> sz;
arraySize = sz;
qsArr = new int[arraySize];
ifstream fin("1.txt");
while ( !fin.eof() && count< arraySize )
{
fin >> qsArr[count];
count++;
}
}
QuickSort::~QuickSort()
{
if (qsArr)
{
delete[] qsArr;
}
}
int QuickSort::patition( int begin, int end)
{
int x = qsArr[end];
int i = begin - 1;
for (int j = begin; j <= end;j++)
{
if (qsArr[j]<x)
{
i++;
int temp = qsArr[i];
qsArr[i] = qsArr[j];
qsArr[j] = temp;
}
}
int temp1 = qsArr[i + 1];
qsArr[i + 1] = qsArr[end];
qsArr[end] = temp1;
return i+1;
}
void QuickSort::qSort(const int begin, const int end)
{
if (begin<end)
{
int q = patition(begin, end);
qSort(begin, q - 1);
qSort(q + 1, end);
}
}
void QuickSort::output()
{
for (int i = 0; i < arraySize; i++)
{
cout << qsArr[i] << " ";
}
cout << endl;
}
void main()
{
QuickSort *qs = new QuickSort();
cout << "创建的数组是:" << endl;
qs->output();
qs->qSort(0, qs->arraySize-1);
cout << "快排结果:" << endl;
qs->output();
while (1)
{
}
}