ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构(13) - 折半排序(二分排序)

2022-06-25 18:00:24  阅读:165  来源: 互联网

标签:折半 sort 13 binary int len low 排序 buf


折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。

 1 /**
 2  * C data structure binary sort example.
 3  * 
 4  * License - MIT.
 5 */
 6 
 7 #include <stdio.h>
 8 
 9 
10 #define DISPLAY_ARRAY(i, buf, len) \
11         do { \
12             for (i = 0; i < len; i++) \
13                 printf("%d ", buf[i]); \
14             printf("\n"); \
15         } while(0)
16 
17 
18 /**
19  * binary_sort - Binary sort.
20 */
21 int binary_sort(int *buf, int len)
22 {
23     int i   = -1,
24         j   = -1,
25         tmp = -1,
26         low = -1,
27         mid = -1,
28         high= -1;
29 
30     for (i = 0; i < len; i++) {
31         tmp = buf[i];
32 
33         for (low = 0, high = i - 1; low <= high;) {
34             mid = (low + high) / 2;
35 
36             if (tmp > buf[mid])
37                 low = mid + 1;
38             else
39                 high = mid - 1;
40         }
41 
42         /* Move data. */
43         for (j = i; j > low; j--)
44             buf[j] =  buf[j - 1];
45 
46         buf[low] = tmp;
47     }
48 
49     return 0;
50 }
51 
52 
53 /**
54  * Main function.
55 */
56 int main(void)
57 {
58     int i = 0;
59     int buf[] = {30, 99, 85, 11, 75, 57, 59, 15, 78, 67};
60     int len = sizeof(buf) / sizeof(int);
61 
62     printf("The original array:\n");
63     DISPLAY_ARRAY(i, buf, len);
64 
65     binary_sort(buf, len);
66 
67     printf("The sort array:\n");
68     DISPLAY_ARRAY(i, buf, len);
69 
70     return 0;
71 }

 

详情请参考Github: [Link] [https://github.com/Phoebus-Ma/C-Helper/tree/main/Class-1/Sort.C].

标签:折半,sort,13,binary,int,len,low,排序,buf
来源: https://www.cnblogs.com/tinyshark/p/16412112.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有