代码:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
//直接插入排序
void directedInsertSort(int A[], int n) {
int i, j;
for (i = 2; i <= n; ++i) {
if (A[i] < A[i - 1]) {
A[0] = A[i];
for (j = i - 1; A[j] > A[0]; --j) {//边比较边移动元素
A[j + 1] = A[j];
}
A[j + 1] = A[0];
}
}
}
//使用二分法查找的直接插入排序
void binaryInsertSort(int A[], int n) {
int i, j, mid, low, high;
for (i = 2; i <= n; ++i) {
if (A[i] < A[i - 1]) {
A[0] = A[i];
low = 1;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (A[mid] <= A[0]) {
low = mid + 1;
}
else {
high = mid - 1;
}
}
for (j = i - 1; j>=low; --j) {
A[j + 1] = A[j];
}
A[j + 1] = A[0];
}
}
}
//冒泡排序
void BubbleSort(int A[], int n) {
int i, j, flag;
for (i = 1; i < n; ++i) {//冒泡n-1次
flag = 0;
for (j = 1; j <= n - i; ++j) {//将值最大的元素逐步交换到数组尾部
if (A[j] > A[j + 1]) {
A[0] = A[j];
A[j] = A[j + 1];
A[j+1] = A[0];
flag = 1;
}
}
if (flag == 0) {
break;
}
}
}
//简单选择排序
void DelectSort(int A[], int n) {
int i, j, min;
for (i = 1; i < n; ++i) {
min = i;
for (j = i; j <= n; ++j) {//找出j-n中最小元素的下标,用min记录;
if (A[j] < A[min]) {
min = j;
}
}
if (min != i) {//如果A[i]是最小的话,就不用操作
A[0] = A[min];//使用A[0]当交换元素位置的中间变量
A[min] = A[i];
A[i] = A[0];
}
}
}
//生成一个大小为n的随机数列,从A[1]开始存储
int* GreatArray(int n) {
int *A;
A = new int[n + 1];
for (int i = 1; i <= n; ++i) {
A[i] = rand()%100;
}
return A;
}
//打印数列的所有元素
void PrintArray(int A[],int n) {
for (int i = 1; i <= n; ++i) {
cout << A[i]<<" ";
}
cout << endl;
}
int main() {
int n;
cout << "请输入数组大小:";
cin >> n;
int* A;
cout << endl;
//直接插入排序,插入过程分为查找插入位置和移动插入位置后的所有元素,查找插入位置可以采用二分法查找;
A = GreatArray(n);
cout << "随机数组元素为:";
PrintArray(A, n);
cout << "直接插入排序后:";
directedInsertSort(A, n);
PrintArray(A, n);
cout << endl;
//冒泡排序
A = GreatArray(n);
cout << "随机数组元素为:";
PrintArray(A, n);
cout << "冒泡排序后 :";
BubbleSort(A, n);
PrintArray(A, n);
cout << endl;
//简单选择排序
A = GreatArray(n);
cout << "随机数组元素为:";
PrintArray(A, n);
cout << "简单选择排序后:";
DelectSort(A, n);
PrintArray(A, n);
cout << endl;
}
运行效果:
请输入数组大小:10
随机数组元素为:41 67 34 0 69 24 78 58 62 64
直接插入排序后:0 24 34 41 58 62 64 67 69 78
随机数组元素为:5 45 81 27 61 91 95 42 27 36
冒泡排序后 :5 27 27 36 42 45 61 81 91 95
随机数组元素为:91 4 2 53 92 82 21 16 18 95
简单选择排序后:2 4 16 18 21 53 82 91 92 95