首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >冒泡排序法三部曲の二冒泡排序法的优化

冒泡排序法三部曲の二冒泡排序法的优化

作者头像
根究FPGA
发布2020-06-30 11:03:01
2880
发布2020-06-30 11:03:01
举报
文章被收录于专栏:根究FPGA根究FPGA

环境: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 :%d\n", times);
 return array;
}
#endif
主函数main.c
#include<stdio.h>
#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 is\n");
 for (int i = 0; i < m; i++)
 printf("%d\t", array[i]);
 printf("\n");   //此处加个换行,用于显示优化后的排序算法内部进行的次数
 improve(array, m);
 printf("After sorted,the sequence is:\n");
 for (int i = 0; i < m; i++)
 printf("%d\t", array[i]);
 return 0;
}

运行结果

可以看到,与原理版中共进行10*10=100次比较过程想必,本结构只需要进行10次比较,效率提升了9倍。其实这也不是最终版,程序还可以进一步优化,这将在冒泡排序最终版中说明。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档