#include "BubbleSort.h" //起泡排序
#include "QuickSort.h" //快速排序
#include <iostream>
using namespace std;
void Print(int r[])
{
for(int i = 1; i < 9; i++)
cout << r[i] << ' ';
cout << endl;
}
int main()
{
int r[9] = {0,50,13,55,97,27,38,49,65};
cout << "初始键值排序:" << endl;
Print(r);
cout << "起泡排序: " << endl;
BubbleSort(r,8);
Print(r);
cout << "快速排序: " << endl;
QuickSort(r, 1, 8);
Print(r);
return 0;
}
BubbleSort.h
//*******************************//
// 起泡排序 //
//*******************************//
void BubbleSort(int r[], int n) //0号单元用作交换操作的暂存单元
{
int exchange = n,bound; //第一趟起泡排序的区间是[1,n]
while(exchange != 0) //当上一趟排序有记录交换时
{
bound = exchange;
exchange = 0;
for(int j = 1; j < bound; j++) //一趟起泡排序,排序区间是[1,bound]
if(r[j] > r[j+1])
{
r[0] = r[j];
r[j] = r[j+1];
r[j+1] = r[0];
exchange = j; //记载每一次记录交换的位置
}
}
}
QuickSort.h
//*******************************//
// 快速排序 //
//*******************************//
int Partition(int r[], int first, int end)
{
int i = first, j = end; //初始化
while(i < j)
{
while(i < j && r[i] <= r[j]) j--; //右侧扫描
if(i < j) //将较小记录交换到前面
{
r[0] = r[i];
r[i] = r[j];
r[j] = r[0];
i++;
}
while(i < j && r[i] <= r[j]) i++; //左侧扫描
if(i < j) //将较大记录交换到前面
{
r[0] = r[i];
r[i] = r[j];
r[j] = r[0];
j--;
}
}
return i; //i为轴值记录的最终位置
}
void QuickSort(int r[], int first, int end)
{
int pivot;
if(first < end) //区间长度大于1,执行一次划分,否则递归结束
{
pivot = Partition(r, first, end); //一次划分
QuickSort(r, first, pivot - 1); //递归地对左侧子序列进行快速排序
QuickSort(r, pivot + 1 , end); //递归地对右侧子序列进行快速排序
}
}