c++语言编程实现以下排序算法: 1. 直接插入排序算法; 2. 冒泡排序算法; 3. 快速排序算法; 4. 简单选择排序算法; (要求:设置哨兵监视,使用typedef定义关键字类型和哨兵与顺序表类型)
时间: 2024-04-21 21:30:04 浏览: 8
好的,以下是对应的代码实现:
```c++
#include <iostream>
#include <ctime> //用于生成随机数
#include <cstdlib> //用于生成随机数
using namespace std;
typedef int KeyType; //关键字类型
typedef struct {
KeyType* r; //存储空间基址
int length; //长度
} SqList; //顺序表类型
//初始化顺序表
void InitList(SqList& L, int n) {
L.r = new KeyType[n + 1];
L.length = n;
}
//直接插入排序
void InsertSort(SqList& L) {
int i, j;
KeyType temp;
for (i = 2; i <= L.length; i++) {
if (L.r[i] < L.r[i - 1]) {
L.r[0] = L.r[i]; //哨兵
for (j = i - 1; L.r[j] > L.r[0]; j--) {
L.r[j + 1] = L.r[j];
}
L.r[j + 1] = L.r[0];
}
}
}
//冒泡排序
void BubbleSort(SqList& L) {
int i, j;
KeyType temp;
bool flag;
for (i = 1; i <= L.length - 1; i++) {
flag = false;
for (j = 1; j <= L.length - i; j++) {
if (L.r[j] > L.r[j + 1]) {
temp = L.r[j];
L.r[j] = L.r[j + 1];
L.r[j + 1] = temp;
flag = true;
}
}
if (flag == false) break;
}
}
//快速排序
int Partition(SqList& L, int low, int high) {
L.r[0] = L.r[low]; //哨兵
int pivot = L.r[low];
while (low < high) {
while (low < high && L.r[high] >= pivot) high--;
L.r[low] = L.r[high];
while (low < high && L.r[low] <= pivot) low++;
L.r[high] = L.r[low];
}
L.r[low] = L.r[0];
return low;
}
void QuickSort(SqList& L, int low, int high) {
if (low < high) {
int pivotPos = Partition(L, low, high);
QuickSort(L, low, pivotPos - 1);
QuickSort(L, pivotPos + 1, high);
}
}
//简单选择排序
void SelectSort(SqList& L) {
int i, j, minIndex;
KeyType temp;
for (i = 1; i <= L.length - 1; i++) {
minIndex = i;
for (j = i + 1; j <= L.length; j++) {
if (L.r[j] < L.r[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
temp = L.r[i];
L.r[i] = L.r[minIndex];
L.r[minIndex] = temp;
}
}
}
//生成随机数
void GenerateRandomNumbers(SqList& L) {
srand((unsigned int)time(NULL));
for (int i = 1; i <= L.length; i++) {
L.r[i] = rand() % 100;
}
}
//输出数组
void PrintList(SqList& L) {
for (int i = 1; i <= L.length; i++) {
cout << L.r[i] << " ";
}
cout << endl;
}
int main() {
const int n = 10;
SqList L;
InitList(L, n);
GenerateRandomNumbers(L);
cout << "排序前:" << endl;
PrintList(L);
//直接插入排序
InsertSort(L);
cout << "直接插入排序后:" << endl;
PrintList(L);
GenerateRandomNumbers(L);
//冒泡排序
BubbleSort(L);
cout << "冒泡排序后:" << endl;
PrintList(L);
GenerateRandomNumbers(L);
//快速排序
QuickSort(L, 1, n);
cout << "快速排序后:" << endl;
PrintList(L);
GenerateRandomNumbers(L);
//简单选择排序
SelectSort(L);
cout << "简单选择排序后:" << endl;
PrintList(L);
return 0;
}
```
注意:为了使代码更具通用性,我在代码中添加了初始化顺序表函数、随机数生成函数和数组输出函数。在实际使用时,可以将这些代码注释掉。