快速排序法从小到大排序
2016-08-16 12:03
176 查看
/**
* 从小到大排序
*
* @param left 0
* @param right 数组的个数
*/
- (void)fastSortLeftIndex:(NSInteger)left WithRightIndex: (NSInteger)right
{
NSInteger i, j;
if(left > right) return;
NSInteger tempModel = [self.dataArr[left] integerValue]; //基准模型
i = left;
j = right;
while (i != j) {
//从右边开始找比基准模型的评分小的模型
while (i<j && [self.dataArr[j] integerValue]>tempModel) {
j--;
}
//从左向右找
while (i < j && [self.dataArr[i] integerValue] <= tempModel) {
i++;
}
//如果左右都找到了就交换模型
if(i < j)
{
NSInteger model_i = [self.dataArr[i] integerValue];
NSInteger model_j = [self.dataArr[j] integerValue];
[self.dataArr replaceObjectAtIndex:i withObject:@(model_j)];
[self.dataArr replaceObjectAtIndex:j withObject:@(model_i)];
}
}
//如果相遇了
self.dataArr[left] = self.dataArr[i];
self.dataArr[i] = @(tempModel);
//第一轮结束之后,采用递归 - 二分法
[self fastSortLeftIndex:left WithRightIndex:i-1];
[self fastSortLeftIndex:i+1 WithRightIndex:right];
return;
//快速排序时间复杂度:N * logN - 所以我比较喜欢快速排序哦
}
* 从小到大排序
*
* @param left 0
* @param right 数组的个数
*/
- (void)fastSortLeftIndex:(NSInteger)left WithRightIndex: (NSInteger)right
{
NSInteger i, j;
if(left > right) return;
NSInteger tempModel = [self.dataArr[left] integerValue]; //基准模型
i = left;
j = right;
while (i != j) {
//从右边开始找比基准模型的评分小的模型
while (i<j && [self.dataArr[j] integerValue]>tempModel) {
j--;
}
//从左向右找
while (i < j && [self.dataArr[i] integerValue] <= tempModel) {
i++;
}
//如果左右都找到了就交换模型
if(i < j)
{
NSInteger model_i = [self.dataArr[i] integerValue];
NSInteger model_j = [self.dataArr[j] integerValue];
[self.dataArr replaceObjectAtIndex:i withObject:@(model_j)];
[self.dataArr replaceObjectAtIndex:j withObject:@(model_i)];
}
}
//如果相遇了
self.dataArr[left] = self.dataArr[i];
self.dataArr[i] = @(tempModel);
//第一轮结束之后,采用递归 - 二分法
[self fastSortLeftIndex:left WithRightIndex:i-1];
[self fastSortLeftIndex:i+1 WithRightIndex:right];
return;
//快速排序时间复杂度:N * logN - 所以我比较喜欢快速排序哦
}
相关文章推荐
- 选择法对10个整数按从小到大顺序排序
- 产生10个1-100的随机整数, * 把其中的奇数按照从小到大的顺序进行排序, * 并按照“1,2,3,、、、”这样的格式打印到d盘下的number.txt文档中。
- C#将集合key键以ASCII码从小到大排序
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
- 输入6个字符串,并对它们按从小到大的顺序排序后输出。
- C语言冒泡排序将一个数组按照从小到大进行排序
- 用冒泡法对M个整数从小到大排序
- 第一个快速排序算法(从小到大排序,java实现)
- 算法入门--堆排序(最大堆,从小到大排序)
- 三个数从小到大排序
- C# 参数按照ASCII码从小到大排序(字典序)
- 从小到大排序三个数
- C语音数组数据从小到大排序
- 用选择法对10个整数按从小到大排序(数组)
- 1-7从小到大排序
- 【Java实现】给出两个整型数组,将他们合并后从小到大排序并输出
- 定义一个数组int[] a = { 3, 0, 0, 4, 8, 2, 9 },从小到大排序后,将5插入正确的位置。
- ACM-三个数从小到大排序
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- java 定制排序 Comparator 区分从大到小还是从小到大