本帖最后由 卢小二 于 2019-9-14 11:23 编辑
环境:VS2017 C language 在冒泡排序法三部曲の一冒泡排序法的原理之后,其实存在一些可优化的问题,首先就是假如是{1,2,3,6,4}这样的数组,经过一次冒泡之后数组变为{1,2,3,4,6}就已经是有序数列,可是编码中并不会识别,所以本次加入了一个数组顺序变换标识符,在每小轮变换前将标识符置一,在本小轮变换过程中如果发生了数组交换就将标识符置零。每小轮变换完成后判断标识符,如果标识符为1即表明数组顺序未发生变化,则直接break跳出主循环。 .h文件
#ifndef BUBBLE_H_ #define BUBBLE_H_
void improve(int *array, int number) { int temp; //中间数据缓存器 int times = 0; for (int i = 0; i < number - 1; i++,times++) //外部循环 { //标记转换 int translate = 1; for (int i = 0; i < number - 1; i++) { if (array[i] > array[i + 1]) { temp = array[i]; array[i] = array[i + 1]; array[i + 1] = temp; translate = 1; } } if (translate == 0) { break; //结束所有循环 } } printf("The time of sort is :%dn", times); return array; } #endif
复制代码
主函数main.c
#include #include"bubble.h"
int main() { int array[] = { 1,2,3,4,5,5,7,6,10,9,8 }; int m = sizeof(array) / sizeof(int); printf("The primary array isn"); for (int i = 0; i < m; i++) printf("%dt", array[i]); printf("n"); //此处加个换行,用于显示优化后的排序算法内部进行的次数 improve(array, m); printf("After sorted,the sequence is:n"); for (int i = 0; i < m; i++) printf("%dt", array[i]); return 0; }
复制代码
运行结果
可以看到,与原理版中共进行10*10=100次比较过程想必,本结构只需要进行10次比较,效率提升了9倍。其实这也不是最终版,程序还可以进一步优化,这将在冒泡排序最终版中说明。
|