1.随机产生500个1~2000之间的整数并输出,完成以下操作: (1)对给定整数进行直接插入排序,显示排序所用时间; (2)对给定整数进行希尔排序,显示排序所用时间; (3)对给定整数进行起泡排序,显示排序所用时间; (4)对给定整数进行快速排序,显示排序所用时间。 部分参考代码如下: #include<ctime> //使用函数库ctime …… int main() { clock_t start,finish; //定义查找开始时间和结束时间变量 …… start=clock(); //记录查找算法的开始时间 查找算法 finish=clock(); //记录查找算法的结束时间 …… }
时间: 2024-03-18 18:40:07 浏览: 48
好的,我可以帮你解答这个问题。以下是完整代码:
```cpp
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int MAXN = 500; // 需要排序的数组大小
const int MAXV = 2000; // 随机数的最大值
// 直接插入排序
void insertSort(int a[], int n)
{
for (int i = 1; i < n; ++i)
{
int j = i - 1;
int tmp = a[i];
while (j >= 0 && a[j] > tmp)
{
a[j + 1] = a[j];
--j;
}
a[j + 1] = tmp;
}
}
// 希尔排序
void shellSort(int a[], int n)
{
for (int gap = n / 2; gap > 0; gap /= 2)
{
for (int i = gap; i < n; ++i)
{
int tmp = a[i];
int j = i - gap;
while (j >= 0 && a[j] > tmp)
{
a[j + gap] = a[j];
j -= gap;
}
a[j + gap] = tmp;
}
}
}
// 冒泡排序
void bubbleSort(int a[], int n)
{
for (int i = n - 1; i >= 0; --i)
{
bool flag = false;
for (int j = 0; j < i; ++j)
{
if (a[j] > a[j + 1])
{
swap(a[j], a[j + 1]);
flag = true;
}
}
if (!flag)
{
break;
}
}
}
// 快速排序
void quickSort(int a[], int left, int right)
{
if (left >= right)
{
return;
}
int pivot = a[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (true)
{
do
{
++i;
} while (a[i] < pivot);
do
{
--j;
} while (a[j] > pivot);
if (i >= j)
{
break;
}
swap(a[i], a[j]);
}
quickSort(a, left, j);
quickSort(a, j + 1, right);
}
// 随机生成n个1~maxv之间的整数
void generateRandomArray(int a[], int n, int maxv)
{
srand(time(NULL));
for (int i = 0; i < n; ++i)
{
a[i] = rand() % maxv + 1;
}
}
// 输出数组
void printArray(int a[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << a[i] << " ";
}
cout << endl;
}
int main()
{
int a[MAXN];
generateRandomArray(a, MAXN, MAXV);
// 直接插入排序
clock_t start = clock();
insertSort(a, MAXN);
clock_t finish = clock();
cout << "直接插入排序所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "秒" << endl;
// 希尔排序
generateRandomArray(a, MAXN, MAXV);
start = clock();
shellSort(a, MAXN);
finish = clock();
cout << "希尔排序所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "秒" << endl;
// 冒泡排序
generateRandomArray(a, MAXN, MAXV);
start = clock();
bubbleSort(a, MAXN);
finish = clock();
cout << "冒泡排序所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "秒" << endl;
// 快速排序
generateRandomArray(a, MAXN, MAXV);
start = clock();
quickSort(a, 0, MAXN - 1);
finish = clock();
cout << "快速排序所用时间:" << (double)(finish - start) / CLOCKS_PER_SEC << "秒" << endl;
return 0;
}
```
代码中使用了四种排序算法:直接插入排序、希尔排序、冒泡排序和快速排序。首先生成了500个1~2000之间的随机整数,然后分别调用四种排序算法对这些整数进行排序,并输出每种算法的耗时。需要注意的是,每次产生随机数的种子是不同的,这样能够保证每次生成的随机数都不同。
阅读全文