A数组中存储500个2000以内的随机整数,完成以下操作: (1)对A数组中的元素进行直接插入排序,显示排序所用时间; (2)对A数组中的元素进行希尔排序,显示排序所用时间; (3)对A数组中的元素进行起泡排序,显示排序所用时间; (4)对A数组中的元素进行快速排序,显示排序所用时间。用完整准确的c++语言表示
时间: 2023-06-16 22:04:00 浏览: 30
以下是完整准确的C++代码实现:
```c++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
// 直接插入排序
void insertSort(int a[], int n) {
for (int i = 1; i < n; i++) {
int j = i - 1;
int temp = a[i];
while (j >= 0 && a[j] > temp) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
// 希尔排序
void shellSort(int a[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = a[i];
int j = i - gap;
while (j >= 0 && a[j] > temp) {
a[j + gap] = a[j];
j -= gap;
}
a[j + gap] = temp;
}
}
}
// 起泡排序
void bubbleSort(int a[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
// 快速排序
void quickSort(int a[], int left, int right) {
if (left >= right) {
return;
}
int pivot = a[left];
int i = left;
int j = right;
while (i < j) {
while (i < j && a[j] >= pivot) {
j--;
}
a[i] = a[j];
while (i < j && a[i] <= pivot) {
i++;
}
a[j] = a[i];
}
a[i] = pivot;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}
int main() {
const int n = 500;
int a[n];
srand(time(NULL));
for (int i = 0; i < n; i++) {
a[i] = rand() % 2000 + 1;
}
// 直接插入排序
clock_t start_time = clock();
insertSort(a, n);
clock_t end_time = clock();
double time = (double)(end_time - start_time) / CLOCKS_PER_SEC;
cout << "直接插入排序所用时间:" << time << "秒" << endl;
// 希尔排序
start_time = clock();
shellSort(a, n);
end_time = clock();
time = (double)(end_time - start_time) / CLOCKS_PER_SEC;
cout << "希尔排序所用时间:" << time << "秒" << endl;
// 起泡排序
start_time = clock();
bubbleSort(a, n);
end_time = clock();
time = (double)(end_time - start_time) / CLOCKS_PER_SEC;
cout << "起泡排序所用时间:" << time << "秒" << endl;
// 快速排序
start_time = clock();
quickSort(a, 0, n - 1);
end_time = clock();
time = (double)(end_time - start_time) / CLOCKS_PER_SEC;
cout << "快速排序所用时间:" << time << "秒" << endl;
return 0;
}
```