用c语言写一个程序要求随机产生10000个数据,并且分别进行起泡排序、快速排序、希尔排序、堆排序、基数排序,并比较各种算法的排序时间

时间: 2024-01-24 19:04:26 浏览: 24
好的,以下是一个简单的C语言程序,可以实现随机产生10000个数据,并分别用起泡排序、快速排序、希尔排序、堆排序和基数排序进行排序,并比较它们的排序时间。 ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define LENGTH 10000 // 交换两个元素的值 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } // 起泡排序 void bubbleSort(int arr[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(&arr[j], &arr[j + 1]); } } } } // 快速排序 void quickSort(int arr[], int left, int right) { if (left < right) { int pivot = arr[left]; int low = left; int high = right; while (low < high) { while (low < high && arr[high] >= pivot) { high--; } arr[low] = arr[high]; while (low < high && arr[low] <= pivot) { low++; } arr[high] = arr[low]; } arr[low] = pivot; quickSort(arr, left, low - 1); quickSort(arr, low + 1, right); } } // 希尔排序 void shellSort(int arr[], int n) { int gap, i, j; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0 && arr[j] > arr[j + gap]; j -= gap) { swap(&arr[j], &arr[j + gap]); } } } } // 堆排序 void heapify(int arr[], int n, int i) { int largest = i; int l = 2 * i + 1; int r = 2 * i + 2; if (l < n && arr[l] > arr[largest]) { largest = l; } if (r < n && arr[r] > arr[largest]) { largest = r; } if (largest != i) { swap(&arr[i], &arr[largest]); heapify(arr, n, largest); } } void heapSort(int arr[], int n) { int i; for (i = n / 2 - 1; i >= 0; i--) { heapify(arr, n, i); } for (i = n - 1; i >= 0; i--) { swap(&arr[0], &arr[i]); heapify(arr, i, 0); } } // 基数排序 void radixSort(int arr[], int n) { int i, j, m = arr[0], exp = 1; int *bucket = (int *)malloc(sizeof(int) * n); for (i = 1; i < n; i++) { if (arr[i] > m) { m = arr[i]; } } while (m / exp > 0) { int bucketCount[10] = {0}; for (i = 0; i < n; i++) { bucketCount[arr[i] / exp % 10]++; } for (i = 1; i < 10; i++) { bucketCount[i] += bucketCount[i - 1]; } for (i = n - 1; i >= 0; i--) { bucket[--bucketCount[arr[i] / exp % 10]] = arr[i]; } for (i = 0; i < n; i++) { arr[i] = bucket[i]; } exp *= 10; } free(bucket); } int main() { int arr[LENGTH], i; clock_t start, end; // 产生随机数 srand((unsigned)time(NULL)); for (i = 0; i < LENGTH; i++) { arr[i] = rand() % 100000; } // 起泡排序 start = clock(); bubbleSort(arr, LENGTH); end = clock(); printf("Bubble sort time: %f s\n", (double)(end - start) / CLOCKS_PER_SEC); // 快速排序 start = clock(); quickSort(arr, 0, LENGTH - 1); end = clock(); printf("Quick sort time: %f s\n", (double)(end - start) / CLOCKS_PER_SEC); // 希尔排序 start = clock(); shellSort(arr, LENGTH); end = clock(); printf("Shell sort time: %f s\n", (double)(end - start) / CLOCKS_PER_SEC); // 堆排序 start = clock(); heapSort(arr, LENGTH); end = clock(); printf("Heap sort time: %f s\n", (double)(end - start) / CLOCKS_PER_SEC); // 基数排序 start = clock(); radixSort(arr, LENGTH); end = clock(); printf("Radix sort time: %f s\n", (double)(end - start) / CLOCKS_PER_SEC); return 0; } ``` 在这个程序中,我们使用 srand() 和 rand() 函数来生成随机数,并将其存储在一个长度为 10000 的数组中。然后,我们分别使用起泡排序、快速排序、希尔排序、堆排序和基数排序对这个数组进行排序,并使用 clock() 函数来测量每个排序算法的执行时间。最后,我们将每个算法的执行时间输出到控制台上。 需要注意的一点是,由于每个排序算法的时间复杂度不同,因此它们的执行时间也会有所差异。因此,在比较这些算法的性能时,需要考虑到这一点。

相关推荐

最新推荐

recommend-type

用C语言实现从文本文件中读取数据后进行排序的功能

是一个十分可靠的程序,这个程序的查错能力非常强悍。程序包含了文件操作,归并排序和字符串输入等多种技术。对大家学习C语言很有帮助,有需要的一起来看看。
recommend-type

c语言学习之排序 数据结构 链表 堆排序 希尔排序 快速排序 递归排序

C 排序 数据结构 链表 堆排序 希尔排序 快速排序 递归排序。详细解释了每个排序方法原理,并带有程序代码。是学习C语言的绝好资料
recommend-type

c语言编程的几种排序算法比较

排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法 对算法本身的速度要求很高。 而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将 给出详细的说明。
recommend-type

C语言实现排序算法之归并排序详解

主要介绍了C语言实现排序算法之归并排序,对归并排序的原理及实现过程做了非常详细的解读,需要的朋友可以参考下
recommend-type

用C语言实现成绩表的快速排序程序设计

问题描述〕给出n个学生的1门课程的考试成绩信息,每条信息由姓名 与分数组成,要求设计快速排序算法,进行: (1)按成绩排序; (2)输出形式为:张强 张平 曾芽 王华 孙军 李应 程滨 90 88 82 78 70 69 65 〔...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。