- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@5,@1,@9,@3,@7,@4,@8,@6,@2]];
[self quickSortWithArray:array left:0 right:array.count-1];
NSLog(@"%@",array);
}
#pragma mark ---快速排序算法 ----
-(void)quickSortWithArray:(NSMutableArray *)dataArray left:(NSInteger)left right:(NSInteger)right{
/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
if (left >= right) {
return;
}
NSInteger i = left;
NSInteger j = right;
NSNumber * key = dataArray[left];
/*控制在当组内寻找一遍*/
while (i< j) {
while (i<j && key <= dataArray[j])
/*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
{
j--;/*向前寻找*/
}
dataArray[i] = dataArray[j];
/*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
a[left],那么就是给key)*/
while(i < j && key >= dataArray[i])
/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
{
i++;
}
dataArray[j] = dataArray[i];
}
dataArray[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
[self quickSortWithArray:dataArray left:left right:i-1];
/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
[self quickSortWithArray:dataArray left:i+1 right:right];
/*用同样的方式对分出来的右边的小组进行同上的做法*/
/*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}
算法之一 : <<快速排序>>
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.快速排序的基本思想 长话短说,排序算法中快速排序的性能还是不错的,今天我就讲讲javascript中实现快速排...
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...