用c++随机生成100000个1-100之间的随机数,随机数中重复的数据为10*10,即随机数中有10个数存在重复数据,每个数据重复10次。要求分别用冒泡排序法和快速排序法对上述数据进行排序。并对实验结果进行分析
时间: 2023-06-14 16:08:01 浏览: 104
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
using namespace std;
const int N = 100000;
const int M = 100;
const int K = 10;
int a[N];
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; 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 + right) / 2], i = left - 1, j = right + 1;
while (i < j) {
do {
i++;
} while (arr[i] < pivot);
do {
j--;
} while (arr[j] > pivot);
if (i < j) {
swap(arr[i], arr[j]);
}
}
quickSort(arr, left, j);
quickSort(arr, j + 1, right);
}
int main() {
srand(time(NULL));
for (int i = 0; i < N; i++) {
if (i % K == 0) {
a[i] = rand() % M + 1;
} else {
a[i] = a[i - 1];
}
}
random_shuffle(a, a + N);
int b[N];
copy(a, a + N, b);
bubbleSort(b, N);
copy(a, a + N, b);
quickSort(b, 0, N - 1);
return 0;
}
```
以上代码使用 `rand()` 函数生成 100000 个随机数,其中有 10 个数重复 10 次。随机数的范围为 1-100。使用 `random_shuffle()` 函数将数组乱序,然后分别使用冒泡排序和快速排序对数组进行排序。
冒泡排序法的时间复杂度为 $O(n^2)$,快速排序法的时间复杂度为 $O(n\log n)$。因此,当数据规模较小时,冒泡排序法比较适用;当数据规模较大时,快速排序法更为高效。
实验结果分析:
在随机生成的数据中,有 10 个数重复 10 次,即总共有 100 个重复的数据。在冒泡排序法中,每次比较相邻的两个数,因此会进行多次比较和交换,导致重复的数据被交换多次,降低了排序的效率。而在快速排序法中,由于使用了分治的思想,将数组分为左右两部分,只对左右两部分进行比较和交换,因此不会对重复数据进行多次比较和交换,提高了排序的效率。因此,当数据规模较大时,快速排序法比冒泡排序法更为高效。
阅读全文