2.实现快速排序算法,基准元素随机选取。要排序的整型数组元素可以用随机数生成器生成,运行程序,记录分别对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果,用c语言编译
时间: 2024-03-16 21:46:21 浏览: 67
好的,我可以帮你实现快速排序算法并编写 C 语言代码。下面是实现快速排序算法的步骤:
1. 选取基准元素,可以随机选取或选取第一个元素。
2. 将数组分成两部分,左边的元素都小于基准元素,右边的元素都大于或等于基准元素。
3. 对左右两部分分别进行递归排序。
下面是 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[low + rand() % (high - low + 1)]; // 随机选取基准元素
int i = low - 1;
for (int j = low; j <= high; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quicksort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quicksort(arr, low, pi - 1);
quicksort(arr, pi + 1, high);
}
}
int main() {
int n[] = {100000, 1000000, 10000000, 50000000};
for (int i = 0; i < 4; i++) {
int *arr = (int*)malloc(n[i] * sizeof(int));
for (int j = 0; j < n[i]; j++) {
arr[j] = rand();
}
clock_t start = clock();
quicksort(arr, 0, n[i] - 1);
clock_t end = clock();
printf("Time for sorting %d elements: %f seconds\n", n[i], (double)(end - start) / CLOCKS_PER_SEC);
free(arr);
}
// 显示100个数据的排序结果
int arr[] = {85, 24, 63, 45, 17, 31, 96, 50, 73, 62, 89, 57, 77, 41, 80, 29, 78, 51, 37, 12, 48, 27, 59, 42, 35, 23, 47, 94, 91, 60, 76, 55, 49, 26, 56, 33, 16, 83, 19, 30, 93, 9, 39, 22, 74, 13, 67, 97, 71, 70, 86, 69, 92, 98, 58, 15, 25, 68, 18, 61, 44, 90, 34, 82, 81, 53, 95, 54, 79, 38, 36, 72, 7, 10, 64, 6, 99, 75, 20, 65, 11, 8, 52, 40, 32, 87, 88, 43, 28, 66, 84, 14, 21, 46};
printf("Before sorting: ");
for (int i = 0; i < 100; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quicksort(arr, 0, 99);
printf("After sorting: ");
for (int i = 0; i < 100; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个代码中,我们使用 `rand()` 函数生成随机数组,使用 `clock()` 函数记录程序运行时间,使用 `malloc()` 函数动态分配数组内存。在 `main()` 函数中,我们首先对四种不同规模的数据进行排序,并统计排序时间。然后,我们展示了一个有 100 个元素的数组的排序结果。
阅读全文