548|14

7876

帖子

20

资源

版主

数组排序问题 [复制链接]

 

有一个数组uint8_t buf[] = {7,8,9,1,2,3,4,5,6};

不需要判断数组内保存的数值,如果只允许使用一个变量"uint8_t tmp",请问怎么能把buf快速设置成{1,2,3,4,5,6,7,8,9}?

 

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

1万

帖子

13

资源

版主

冒泡排序?

点评

这个和冒泡还不太一样 ,因为不需要考虑数组内的内容,只是把指定索引后的数据移到最前边,再把这个索引前的数据补到最后边  详情 回复 发表于 2020-12-24 23:39
相当于把123456左移3次,再把789补到6后边,如果再创建一个数组会很方便,不过如果这个数组很长,内存又有限,怎么能对这个数组快速处理就是个问题  详情 回复 发表于 2020-12-24 23:35

回复

7876

帖子

20

资源

版主

dcexpert 发表于 2020-12-24 22:14 冒泡排序?

相当于把123456左移3次,再把789补到6后边,如果再创建一个数组会很方便,不过如果这个数组很长,内存又有限,怎么能对这个数组快速处理就是个问题

点评

那不还是和冒泡排序是差不多吗  详情 回复 发表于 2020-12-25 08:47

回复

7876

帖子

20

资源

版主

dcexpert 发表于 2020-12-24 22:14 冒泡排序?

这个和冒泡还不太一样 ,因为不需要考虑数组内的内容,只是把指定索引后的数据移到最前边,再把这个索引前的数据补到最后边


回复

283

帖子

1

资源

一粒金砂(高级)

能不能这样:定义的时候稍微大一点uint8_t buf[] = {7,8,9,1,2,3,4,5,6,0,0,0};再定义一个指针指向uint8_t *ptr=&buf[3];每次排序只要将789的内容挪到最后面去,这样ptr[]就可以当作排序后的数组使用了。

个人签名模电临时工

回复

1万

帖子

13

资源

版主

littleshrimp 发表于 2020-12-24 23:35 相当于把123456左移3次,再把789补到6后边,如果再创建一个数组会很方便,不过如果这个数组很长,内存又 ...

那不还是和冒泡排序是差不多吗,效率稍低,但是简单占用内存少


回复

3805

帖子

0

资源

版主

排序算法和数据的特征有关系,你这个数据量太少不太好说是什么特征

基本有序的情况我记得是堆排序最快,记不太清楚了.


回复

3805

帖子

0

资源

版主

效率问题还得和实际情况结合,比如每一个数据对应磁盘上一个文件,要移动一次文件花费的时间就是很多,这时候尽量减少移动的次数就很重要.


回复

3374

帖子

1

资源

版主

本帖最后由 damiaa 于 2020-12-25 14:52 编辑

 

 

选择排序慢了点
//冒泡法快点

 


回复

5924

帖子

209

资源

版主

这是某本数据结构书里的一道课后题

第一步:翻转7-9的顺序

第二步:翻转1-6的顺序

第三步:翻转整个数组

点评

这种方法能实现,不过需要很多步。  详情 回复 发表于 2020-12-28 14:57
个人签名

EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,上班摸鱼场,释放压力好地方!商家勿入!加群暗号:喵


回复

7876

帖子

20

资源

版主

数据中每个数据的位置都要移动,移动的次数最少是buf_len +1次

我能想到通过下边方式移动数据

但是代码怎么写现在还没有思路

image.png

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

777

帖子

2

资源

版主

是一个值得思考的问题哈,先拿小本本记下来,说不定就想到好点子了。


回复

254

帖子

0

资源

一粒金砂(高级)

用y= x+4  [0 ,5]  ; y=x-6 [6,9] 来转换下buf[y] 的坐标呢;


回复

7876

帖子

20

资源

版主

lcofjp 发表于 2020-12-25 11:18 这是某本数据结构书里的一道课后题 第一步:翻转7-9的顺序 第二步:翻转1-6的顺序 第三步:翻转整 ...

这种方法能实现,不过需要很多步。

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

8

帖子

0

资源

一粒金砂(中级)

排序太简单了把, 一般环形有序数组出题都是考二分查找的。


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表