合并算法
来源:互联网 发布:star法则 知乎 编辑:程序博客网 时间:2024/05/24 15:43
//
// ViewContrller2.m
// Sort
//
// Created by apple on 15/12/7.
// Copyright © 2015年 apple. All rights reserved.
//
#import "ViewContrller2.h"
#import "Header.h"
@implementation ViewContrller2
- (void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColorwhiteColor];
int arr[10] = {12,36,47,58,10,41,43,93,148,1200};
//mergeOneArrTwoSection(arr, 0, 4, 9);
mergeSort(arr, 0, 9);
printCArr(arr, 10);
}
//合并一个数组里面的两个部分
void mergeOneArrTwoSection(int * a,int left ,int mid,int right) {
if (left < right) {
int leftSectionCount = mid - left + 1; // 左边的个数
int rightSectionCount= right - mid;//右边的个数
int temp[100] = {0};//用来缓存左右分区的数据
int leftIndex = left; //左边的起始值
int rightIndex= mid+1;//右边的起始值
int tempIndex = 0;// 缓存的起始值
//同时布局左右分区的数组
while (leftSectionCount>0 && rightSectionCount >0) {
if (a[leftIndex] < a[rightIndex]) {
temp[tempIndex++] = a[leftIndex++];
leftSectionCount--;
}else {
temp[tempIndex++] = a[rightIndex++];
rightSectionCount -- ;
}
}
// 如果走了这个说明只剩下左边分区
while (leftSectionCount >0) {
temp[tempIndex++] = a[leftIndex++];
leftSectionCount--;
}
// 如果走了这个说明只剩下右边分区
while (rightSectionCount >0) {
temp[tempIndex++] = a[rightIndex++];
rightSectionCount--;
}
//从新把temp值赋值给a
int i = 0;
while (left+i <= right) {
a[left+i] = temp[i];
i++;
}
}
}
void mergeSort(int * a,int left ,int right) {
if (left < right) {
int mid = (left + right)/2;
mergeSort(a, left, mid); // 左边有序
mergeSort(a, mid+1, right);//右边有序
mergeOneArrTwoSection(a, left, mid, right);//合并
}
}
@end
- 合并算法
- 合并算法
- 合并算法
- 算法之合并算法
- 算法导论--合并算法
- 合并排序算法
- 合并排序算法
- datagrid合并单元格算法。
- 合并等价标签算法.
- 算法-----合并排序
- DataGrid合并单元格算法
- bmp图片合并算法
- java 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序 算法实现
- c++合并排序算法
- 国内大互联网公司如何做测试
- 学习oracle里面触发器的功能作用,举一个例子来说明:
- iOS获取相关参数
- Android添加按钮事件的几种方法
- webpack开发工具 (gulp、browserify、webpack)
- 合并算法
- Android Studio快捷键以及一些小技巧
- centos7 xfs分区重调整
- Eigen使用快速参考
- 定制CRM需要做哪些准备?
- rgb2hsi函数
- solaris识别新加存储盘
- Linux上修改open files数目
- sqlload的使用