1、冒泡排序
依次比较,将最大的放在最后面。
冒泡排序
#include <iostream>
using namespace std;
template <class T>
void BubbleSort(T A[], int n)
{
int i,j;
bool flag;
T temp;
for(i = n - 1,flag = 1; i > 0 && flag; i--)//加入flag的判断方式能够大量减小运行的时间
{
//设置未交换位置
flag = false;
for(j = 0; j < i; j++)
{
if(A[j + 1] < A[j])
{
//有交换
flag = true;
temp = A[j + 1];
A[j + 1] = A[j];
A[j] = temp;
}
}
}
}
int main()
{
int A[6] = {5, 6 , 8 ,2 ,3,7};
BubbleSort(A,6);
for(int i = 0; i < 6; i++)
{
cout << A[i] << " ";
}
return 0;
}
2、快速排序
即找出一个作为中间数判断,小于它的放左边,大于它的放右边。
初始状态,左边第一个位置设为空位,从最右边的数判断,大于则向左,小于则把数据放到前面的空位,后面位置变为空位,然后从左向右检索数据,最后两者相遇结束。
多次递归进行求出结果。
快速排序
#include <iostream>
using namespace std;
template <class T>
void QSort(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 && A[j] > temp)
j--;
//循环出来说明此时A[j]是符合要求的
if(i < j)//确保此时i != j
{
A[i] = A[j];
i++;
}
//此时A[j]表示空位
while(i < j && A[i] <= temp)
i++;
if(i < j)
{
A[j] = A[i];
j--;
}
//A[i]又表示空位
}
A[i] = temp;//找到中心值对应位置写入中心值
QSort(A,low, --j);//递归小于中心值的数
QSort(A,++i, high);//递归大于中心值的数
}
int main()
{
int A[6] = {5, 6 , 8 ,2 ,3,7};
QSort(A,0,6);
for(int i = 0; i < 6; i++)
{
cout << A[i] << " ";
}
return 0;
}