各种排序代码如下:
//子序列进行分割
int partition(vector<int>& vec, int low, int high)
{
int pivot = vec[low];
while (low < high)
{
while (vec[high] >= pivot&&high>low)
--high;
vec[low] = vec[high];
while (vec[low] <= pivot&&high>low)
++low;
vec[high] = vec[low];
}
vec[low] = pivot;
return low;
}
//快速排序
void quickSort(vector<int>& vec,int i,int j)
{
if (i == j)
return;
int mid = partition(vec, i, j);
if (i < mid)
quickSort(vec, i, mid - 1);
if (mid < j)
quickSort(vec, mid + 1, j);
}
//直接插入排序
void insertSort(vector<int>& vec)
{
int i = 0;
int j = vec.size();
cout << "原始序列:";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
while (i < j)
{
int k = i++;
int temp = vec[k];
while (k > 0 && temp < vec[k - 1])
{
vec[k] = vec[k-1];
--k;
}
vec[k] = temp;
cout << "本次排序结果:";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
}
//冒泡排序
void bubleSort(vector<int>& vec)
{
int j = vec.size() - 1;
bool isExchange = true;
while ( 0<j&&isExchange)
{
int k = 0;
isExchange = false;
while (k < j)
{
if (vec[k] > vec[k + 1])
{
swap(vec[k], vec[k + 1]);
isExchange = true;
}
++k;
}
--j;
cout << "本次排序结果:";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
}
//选择排序
void selectSort(vector<int>& vec)
{
int i = 0;
while (i != vec.size())
{
int j = i;
int min = vec[j];
int minIndex = j;
while (j != vec.size())
{
if (vec[j] < min)
{
min = vec[j];
minIndex = j;
}
++j;
}
vec[minIndex] = vec[i];
vec[i++] = min;
cout << "本次排序结果:";
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
}