用c++编程,采用几组不同数据测试以下排序算法的时间性能。直接插入排序希尔排序冒泡排序快速排序直接选择排序堆排序
时间: 2023-06-30 09:24:16 浏览: 41
以下是一个使用 C++ 实现各种排序算法并测试运行时间的示例代码:
```cpp
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
// 直接插入排序
void insertSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int temp = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
// 希尔排序
void shellSort(int arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
}
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
// 快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
// 直接选择排序
void selectSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(arr[i], arr[minIndex]);
}
}
}
// 堆排序
void adjustHeap(int arr[], int i, int n) {
int temp = arr[i];
for (int j = 2 * i + 1; j < n; j = 2 * j + 1) {
if (j + 1 < n && arr[j] < arr[j + 1]) {
j++;
}
if (temp < arr[j]) {
arr[i] = arr[j];
i = j;
} else {
break;
}
}
arr[i] = temp;
}
void heapSort(int arr[], int n) {
for (int i = n / 2 - 1; i >= 0; i--) {
adjustHeap(arr, i, n);
}
for (int i = n - 1; i > 0; i--) {
swap(arr[0], arr[i]);
adjustHeap(arr, 0, i);
}
}
int main() {
srand(time(NULL));
const int N = 10000;
int arr1[N], arr2[N], arr3[N], arr4[N], arr5[N], arr6[N];
for (int i = 0; i < N; i++) {
arr1[i] = rand();
arr2[i] = arr1[i];
arr3[i] = arr1[i];
arr4[i] = arr1[i];
arr5[i] = arr1[i];
arr6[i] = arr1[i];
}
clock_t start, end;
start = clock();
insertSort(arr1, N);
end = clock();
cout << "Insertion sort time: " << end - start << " ms" << endl;
start = clock();
shellSort(arr2, N);
end = clock();
cout << "Shell sort time: " << end - start << " ms" << endl;
start = clock();
bubbleSort(arr3, N);
end = clock();
cout << "Bubble sort time: " << end - start << " ms" << endl;
start = clock();
quickSort(arr4, 0, N - 1);
end = clock();
cout << "Quick sort time: " << end - start << " ms" << endl;
start = clock();
selectSort(arr5, N);
end = clock();
cout << "Selection sort time: " << end - start << " ms" << endl;
start = clock();
heapSort(arr6, N);
end = clock();
cout << "Heap sort time: " << end - start << " ms" << endl;
return 0;
}
```
在上面的代码中,我们使用了随机数生成器生成了一组包含 10000 个随机数的数组,并对这个数组分别调用了直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序和堆排序,并输出了每个排序算法的运行时间。