冒泡排序(bubbleSort)

来源:互联网 发布:caffe alexnet 编辑:程序博客网 时间:2024/05/01 01:37

冒泡排序(bubbleSort)


冒泡->改进->再改进。


原始的冒泡排序算法:

#include <stdio.h>void swap(int &x, int &y){int t = x;x = y;y = t;}int main(){int num[30] = { 5, 3, 2, 6, 7, 0, 1, 8, 9, 4,18, 17, 19, 12, 15, 13, 14, 16, 11, 10 };int lo = 0, hi = 20;int cnt = 0; // 记录比较次数for (int i = 0; i < hi; i++){for (int j = 1; j < hi-i-1; j++){cnt++;if (num[j - 1] > num[j]){swap(num[j - 1], num[j]);}}}printf("总共比较了:%d次\n", cnt); // 380次for (int i = 0; i < hi; i++)printf("%d ", num[i]);getchar();return 0;}




改进后的算法(加入提前结束标志sorted):
#include <stdio.h>void swap(int &x, int &y){int t = x;x = y;y = t;}// 改进算法int main(){int num[30] = { 5, 3, 2, 6, 7, 0, 1, 8, 9, 4,18, 17, 19, 12, 15, 13, 14, 16, 11, 10 };int lo = 0, hi = 20;int cnt = 0; // 记录比较次数for (int i = 0; i < hi; i++){int sorted = 1;for (int j = 1; j < hi-i-1; j++){cnt++;if (num[j - 1] > num[j]){swap(num[j - 1], num[j]);sorted = 0;}}if (sorted == 1) break; // 如果没有要交换的序列,则排序结束}printf("总共比较了:%d次\n", cnt); // 190次for (int i = 0; i < hi; i++)printf("%d ", num[i]);getchar();return 0;}




再改进算法:
#include <stdio.h>void swap(int &x, int &y){int t = x;x = y;y = t;}// 再改进算法int main(){int num[30] = { 5, 3, 2, 6, 7, 0, 1, 8, 9, 4,18, 17, 19, 12, 15, 13, 14, 16, 11, 10 };int lo = 0, hi = 20;int last = hi;int k;int cnt = 0;for (int i = 0; i < hi; i++){k = last;for (int j = 1; j <  k; j++){cnt++;if (num[j - 1] > num[j]){swap(num[j - 1], num[j]);last = j;}}if (k == last) break;}printf("总共比较了:%d次\n", cnt); // 145次for (int i = 0; i < hi;i++)printf("%d ", num[i]);getchar();return 0;}



0 0
原创粉丝点击