前言:
今天各位老铁们对“c语言中冒泡排序的算法”大约比较关切,各位老铁们都需要分析一些“c语言中冒泡排序的算法”的相关内容。那么小编同时在网络上网罗了一些有关“c语言中冒泡排序的算法””的相关知识,希望兄弟们能喜欢,看官们一起来了解一下吧!C语言是过去几十年软件和硬件两个阵营之间,签署的最坚实的契约。硬件为C语言的语义提供了最能发挥其性能的基础构件,而软件虽然搞了很多的圆环套圆环般的层次,但最终都以C语言作为最后的沉淀收尾。----后面也会有C版的迷你程序!!!
之所以起头写这样系列的文档,主要是锻炼自己的编码能力,类似于leetcode吧。
浅话到此,C版的迷你程序、Python版的迷你程序、以及两个语言好玩的小项目,都会持续不定时的网络收集和自己把玩。充实自己的小白脑细胞。另外新进语言Rust和go也会有所涉猎。
1 冒泡的调试
冒泡排序--Bubble Sort是一种简单的排序算法。内层循环重复地访问要排序的数列,一次比较两个元素,如果他们的顺序“错误”(看23行和27行,从大到小还是从小到大)就把他们交换过来。每一次的外层循环都会找到一个最值。截图中肉眼可见的数据移动策略。
#include <stdio.h>#include <time.h>#include <stdlib.h>#include <sys/time.h>void ShowSortPro(int arr[], int len){ int i; for (i = 0; i < len; i++) printf("%6d ", arr[i]); printf(" \n");}// // 冒泡排序// 输入参数:数组// 数组的长度//void BubbleSort(int arr[], int len) { int i, j, temp; // > 小到大的排序 for (i = 0; i < len - 1; i++){ // 每一层结束找到最大值 printf("======================================================== %d\n", i); for (j = 0; j < len - 1 - i; j++){ if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } ShowSortPro(arr, len); } printf("======================================================== %d\n", i); }}void main() { int arr[] = { 65, 75, 59, 26, 92, 19, 8, 67 }; int len; int i; // sizeof是运算符,不是函数 // sizeof能求得静态分配内存的数组的长度,即占用内存的大小,以byte为单位 len = (int) sizeof(arr) / sizeof(arr[0]); //printf("%ld \n", sizeof(arr)); //printf("%ld \n", sizeof(arr[0])); ShowSortPro(arr, len); printf("===========================================================START=\n"); BubbleSort(arr, len); printf("============================================================END\n"); ShowSortPro(arr, len);}
2 冒泡的耗时
这里只是测试编译器对代码进行自动优化编译和不优化的耗时比较,后续还会有其他排序算法的进行此类耗时比较,这个算法的耗时其实受到原始数据序列性的严重影响,所以代码把随机数的种子取消了,编译优化不优化处理同样的数据。感兴趣的可以试试其他级别的优化,这里要注意优化后程序的结果要正确耗时比较才有意义。
#include <stdio.h>#include <time.h>#include <stdlib.h>#include <sys/time.h>void ShowSortPro(int arr[], int len){ int i; for (i=0; i<len; i++) printf("%6d ", arr[i]); printf(" \n");}// // 冒泡排序// 输入参数:数组// 数组的长度//void BubbleSort(int arr[], int len) { int i, j, temp; // > 小到大的排序 for (i=0; i<len-1; i++){ // 每一层结束找到最大值 //printf("======================================================== %d\n", i); for (j=0; j<len-1-i; j++){ if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } //ShowSortPro(arr, len); } //printf("======================================================== %d\n", i); }}#define N 16*1024int arrtime[N];int arrtimecopy[N];void main() { int len=15; int i; //srand((unsigned)time(NULL)); for (i = 0; i < N; i++) arrtime[i] = rand()%32768; for (i = 0; i < N; i++) arrtimecopy[i] = arrtime[i]; struct timeval start_time, end_time; unsigned int spend_us = 0; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("1 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime[i] = arrtimecopy[i]; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("2 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime[i] = arrtimecopy[i]; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("3 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime[i] = arrtimecopy[i]; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("4 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); for (i=0; i<N; i++) arrtime[i] = arrtimecopy[i]; ShowSortPro(arrtime, len); printf("============================================================START\n"); gettimeofday(&start_time, NULL); BubbleSort(arrtime, N); gettimeofday(&end_time, NULL); spend_us += end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec); printf("============================================================END\n"); ShowSortPro(arrtime, len); printf("5 \t spend %ld us \n", (end_time.tv_usec-start_time.tv_usec+1000000*(end_time.tv_sec-start_time.tv_sec))); printf("T \t spend %f us \n", spend_us/5.0);}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。