用C语言实现快速排序算法,基准元素随机选取。要排序的整型数组元素可以用随机数生成器生成,运行程序,记录分别对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。要求能在Dev C++上运行
时间: 2024-03-23 18:39:44 浏览: 152
好的,这是一个关于算法和C语言的问题,我会尽力回答。下面是快速排序算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N_LIST_SIZE 4
// 生成随机整数数组
void generate_random_arr(int arr[], int n) {
srand(time(NULL));
for (int i = 0; i < n; i++) {
arr[i] = rand() % 100;
}
}
// 交换数组中两个元素的值
void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 快速排序算法
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
// 随机选择基准元素
int pivot_index = rand() % (right - left + 1) + left;
int pivot = arr[pivot_index];
// 将基准元素放到数组最后面
swap(arr, pivot_index, right);
// 分区
int i = left;
int j = right - 1;
while (i <= j) {
while (i <= j && arr[i] <= pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i < j) {
swap(arr, i, j);
}
}
swap(arr, i, right);
// 递归排序左右两部分
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
// 输出前100个排序结果
void print_first_100(int arr[], int n) {
printf("First 100 sorted elements:\n");
for (int i = 0; i < 100; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 测试排序时间
void test_sort_time(int n_list[], int n_list_size) {
printf("n\ttime\n");
for (int i = 0; i < n_list_size; i++) {
int n = n_list[i];
int arr[n];
generate_random_arr(arr, n);
clock_t start_time = clock();
quick_sort(arr, 0, n - 1);
clock_t end_time = clock();
double duration = (double)(end_time - start_time) / CLOCKS_PER_SEC;
printf("%d\t%.5f\n", n, duration);
}
}
int main() {
int arr[100];
generate_random_arr(arr, 100);
quick_sort(arr, 0, 99);
print_first_100(arr, 100);
int n_list[N_LIST_SIZE] = {100000, 1000000, 10000000, 50000000};
test_sort_time(n_list, N_LIST_SIZE);
return 0;
}
```
这个示例代码中,我们使用 `rand` 函数来随机选择基准元素,然后将数组分为左右两部分。我们使用双指针 `i` 和 `j` 来遍历数组,并将小于基准元素的部分放到左边,大于基准元素的部分放到右边。最后将基准元素放到左右两部分的中间位置,并递归地对左右两部分进行排序。
对于测试排序时间,我们分别生成了四个不同大小的随机整数数组,并记录了排序所用的时间。对于输出前100个排序结果,我们只需要输出排序后数组的前100个元素即可。
希望这个示例代码对您有所帮助!
阅读全文