IOS之C语言 (二路归并与冒泡排序)
来源:互联网 发布:68.168.16.158现在域名 编辑:程序博客网 时间:2024/06/07 06:20
学习IOS一周时间,每天面对着电脑,刚开始学c语言,觉得蛮简单,但是昨天遇到的一个问题琢磨了一晚上都没有琢磨出来,今天看到一个关于二路归并的算法,正合适,另外附上经典C语言排序方法,冒泡排序;
先说说二路归并方法的定义:就是把一定组合顺序组成的一个数组两项两项分成若干组,按同样的规律进行排序,然后排序之后再对两组两组合并排序,同样用相同的规律排序,以此递推,最终完成一个数组的排序。当然在对两组两组结合的时候,可以将合并的组分别进行冒泡排序,最终得出所想要的顺序。
拿我遇到的难题做个例子:对两个整形数组排序,将排序结果放入到一个大的数组中。题目其实用冒泡会很简单,但是有一点点要求就是不能用冒泡排序,二路归并其实是一个很好的选择;
首先我们可以确定的是我们需要三个数组,并且第三个数组容量必须足够容纳前两个数组;那我们就先定义三个数组;
int a1[5] = {0}; //就拿5个做例子吧
int a2[5] = {0};
int a3[10] = {0};
接下来就先让两个数组随机产生:(当然还要有适当的输出语句)
第一组随机数: a1[5]:
printf("随机产生五个数a1[5]: ");
for (int i = 0; i < 5; i++) {
a1[i] = arc4random() % 101 + 100;//随机数就让处于100到200之间好了,简单易懂
printf(" %d\t", a1[i]);
}
printf("\n");
第二组随机数: a2[5]:
printf("随机产生五个数a2[5]: ");
for (int i = 0; i < 5; i++) {
a2[i] = arc4random() % 101 + 100;/
printf(" %d\t", a2[i]);
}
接下来要做的就是分别对两个数组进行排序(这个时候就是用冒泡排序的时候)
for (int i = 0; i < 5; i++) {
printf("%d\t" , b[ i ]);
}
printf("\n");
for (int i = 0; i < 5 - 1; i++) {
for (int j = 0; j < 10 - 1 - i; j++) {
if (a[j] < a[j + 1]) {
d = a[ j ];
a[ j ] = a[ j + 1 ];
a[ j + 1 ] = d;
}
if (b[j] < b[j + 1]) {
d = b[j];
b[j] = b[j + 1];
b[j + 1] = d;
}
}
}
接下来要做的就是关键部分了:
排序完成,先对数组输出:
for (int i = 0 ; i < 5; i++) {
printf("%d\t" , a[ i ] );
}
for (int i = 0; i < 10; i++) {
printf("%d\t", b[ i ] );
}
分别定义三个数组的下标,以便将数组的位置进行对应起来
int x = 0 , y = 0 , z = 0;
while (x < 5 && y < 5) {
if (a[x] >= b[y]) {//需要考虑数据空间有限的问题,就是定义下标的另一个目的
c[z] = a[x]; // 满足条件后,将元素对号入座
x++;
z++;
} else {
c[ z] = b[ y ];
y++;
z++;
}
}
上面元素比较之后还存在没有比较的元素,可以确定,对应的元素肯定是在同一个数组里面
因为已经比较的元素对已经转移到c数组里面,因此存在两种情况,要么,元素在a里面,要么在b里面
while (x < 5) {
c[z] = a[x];//对号入座进行输出
z++;
x++;
}
while (bi < 5) {
c[z] = b[y];
y++;
z++;
}
已经归并完毕,接下来要做的就是依题意将c组元素全部输出
for (int i = 0; i < 20; i++) {
printf('%d\t', c[i]);
}
其实二路归并是数据结构中一种常见的优化办法,效率高。大家学会之后在c语言,以及以后的OC之中运用,会大大提高程序的运行效率。
- IOS之C语言 (二路归并与冒泡排序)
- c语言之冒泡排序法与选择排序法的使用比较(二)
- 二路归并排序c语言实现
- 二路归并排序(C语言实现)
- C语言之归并排序
- 排序 之 归并排序(二路)
- c语言之冒泡排序
- C语言之冒泡排序
- C语言之冒泡排序
- c语言之冒泡排序
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- c语言归并、选择、直接插入、冒泡、快速、堆排序与顺序、二分查找
- 二路归并排序算法实现-完整C语言程序
- 数据结构-数组排序-二路归并-循环实现-C语言
- C语言排序之归并排序篇
- 查找与排序之冒泡排序篇(C语言实现)
- OC学习之道:C语言的冒泡排序与OC的冒泡排序之比较
- 顺时针打印矩阵
- 1013. Battle Over Cities (25)
- python:filter、lambda和map、reduce
- Memcached之——Spring与Memcached的集成
- hdu 5326 Work
- IOS之C语言 (二路归并与冒泡排序)
- 深入理解Java的接口和抽象类
- 生活点滴
- HDU 5428 The Factor——BestCoder Round #54(div.1 div.2)
- 【LeetCode】之Valid Palindrome
- 调试rust的宏
- 各种版本下载
- 选择一个Python Web框架:Django vs Flask vs Pyramid
- Spark:一个高效的分布式计算系统