考研数据结构与算法之排序专题二 冒泡排序及优化
2015-01-31 22:20
246 查看
冒泡排序顾名思义就是由于在排序过程中总是小数往前放,大数往后放,相当于气泡上升。
基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。然后从头开始比较,比较n-2次,第二次结束,重复以上操作
至排序结束。
测试谭浩强版冒泡排序(B_S_Tan)对随机生成的10000个数的数组进行排序所用时间为0.974s(每次运行所需时间不同)
优化后的冒泡排序(B_S_Op)随机生成100 000个数的数组进行排序所用时间仅为 0.004s(每次运行所需时间较大不同)
设置一个flag个标志,如果这一趟排序发生了交换,则将flag置为true,否则为flase,显然如果一趟排序没有发生交换则说明数组已排好序。
代码如下:
基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。然后从头开始比较,比较n-2次,第二次结束,重复以上操作
至排序结束。
测试谭浩强版冒泡排序(B_S_Tan)对随机生成的10000个数的数组进行排序所用时间为0.974s(每次运行所需时间不同)
优化后的冒泡排序(B_S_Op)随机生成100 000个数的数组进行排序所用时间仅为 0.004s(每次运行所需时间较大不同)
设置一个flag个标志,如果这一趟排序发生了交换,则将flag置为true,否则为flase,显然如果一趟排序没有发生交换则说明数组已排好序。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define bool int #define true 1 #define false 0 #define SIZE 100000 void B_S(int s[], int n){ int i,pos,j,temp; for ( i = 0; i < n; i++){ pos = 1; for (j = 0; j < n-i-1; j++){ if (s[j] > s[j + 1]){ temp = s[j]; s[j] = s[j + 1]; s[j + 1] = temp; pos = 0; } } if (pos) return; } } void B_S_Tan(int s[],int n) { int i,j,temp; for(j=0;j<n-1;j++) { for(i=0;i<n-1-j;i++) { if(s[i]>s[i+1]) { temp=s[i]; s[i]=s[i+1]; s[i+1]=temp; } } } printf("the sorted numbers:\n"); } void B_S_Op(int s[], int n) { int j, k,temp; bool flag; k = n; flag = true; while (flag) { flag = false; for (j = 1; j < k; j++) if (s[j - 1] > s[j]) { temp=s[j]; s[j]=s[j-1]; s[j-1]=s[j]; flag = true; } k--; } } int main(int argc, char *argv[]){ int s[SIZE]; int i; clock_t start, finish; double Total_time; for (i = 0; i < SIZE; i++){ s[i] = rand() % 100; } start = clock(); B_S_Op(s,SIZE); //B_S_Tan(s, SIZE); //B_S(s,SIZE); finish = clock(); Total_time = (double)(finish - start) / CLOCKS_PER_SEC; printf("%d个数的运行时间为%.3f\n", SIZE, Total_time); /*for (i = 0; i < SIZE; i++) printf("%d ", s[i]);*/ printf("\n"); system("pause"); }
相关文章推荐
- 考研数据结构与算法之排序专题三 直接插入排序
- 考研数据结构与算法之排序专题一 快速排序
- 内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- 2015级计科软件《数据结构与算法》实践能力专题训练8排序
- 排序1——冒泡排序及优化
- 冒泡排序和选择排序以及选择排序的优化
- 详解冒泡排序和对其优化的Shaker 排序
- 数据结构与算法专题之查找与排序——静态查找(顺序、二分、哈希)
- 排序(1)——冒泡排序及其优化
- 三、数据结构与算法--排序(冒泡排序、选择排序)
- 冒泡排序,选择排序,插入排序,快速排序的比较及优化
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 看数据结构写代码(2) 选择排序 和 冒泡排序 算法优化
- 【DAY.2】PHP数据结构与算法_排序_冒泡排序
- 排序-冒泡排序最终优化版本
- 内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- C语言:使用冒泡排序,排序多个字符串(优化)。
- 交换类排序:冒泡排序(优化)和快排
- 简单排序——冒泡排序及其优化