一、冒泡排序
#include<bits/stdc++.h>
using namespace std;
// 以升序为例
template<class T>
void BubbleSort(T * A, int n)
{
// 0号为气泡,若比后一个元素则气泡上升后移
for (int i = n - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (A[j] > A[j + 1])
{
T temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
}
}
}
}
int main()
{
int len;
cin >> len;
int * A = new int[len];
for (int i = 0; i < len; i++)
{
cin >> A[i];
}
BubbleSort(A, len);
for (int i = 0; i < len; i++)
{
cout << A[i] << " ";
}
cout << endl;
return 0;
}
/*
测试
10
2 8 6 7 5 4 3 1 0 9
*/
二、快速排序
#include <bits/stdc++.h>
using namespace std;
template<class T>
void QuickSort(T * A, int low, int high)
{
int i, j;
T temp;
if (low >= high)
{
return;
}
i = low;
j = high;
temp = A[i];
while(i < j)
{
// 从后往前进行比较,直到当前记录的排序码小于等于中心值
while(i < j && temp < A[j])
{
j--;
}
if (i < j)
{
// 将排序码小于等于中心值的记录,交换到前面当前空出的记录位置
A[i++] = A[j];
}
// 从前往后进行比较,直到当前记录的排序码大于中心值
while(i < j && A[i] <= temp)
{
i++;
}
if (i < j)
{
// 将排序码大于中心值的记录交换到后面当前空出的记录位置
A[j--] = A[i];
}
}
// 找到中心值对应的记录所在的位置,写入中心值对应的记录
A[i] = temp;
// 递归处理排序码小于等于中心值的那组记录
QuickSort(A, low, --j);
// 递归处理排序码大于中心值的那组记录
QuickSort(A, ++i, high);
}
int main()
{
int len;
cin >> len;
int * A = new int[len];
for (int i = 0; i < len; i++)
{
cin >> A[i];
}
QuickSort(A, 0, len - 1);
for (int i = 0; i < len; i++)
{
cout << A[i] << " ";
}
cout << endl;
return 0;
}
/*
测试
10
2 8 6 7 5 4 3 1 0 9
*/