快速排序思想
看網(wǎng)上講快速排序半天才搞懂缭贡,總結(jié)一下,快速排序核心思想是保證每個元素其所有左邊元素比其小快鱼,所有右邊元素比其大纲岭。這樣理解最簡單窃判,具體是通過迭代來實現(xiàn)的袄琳。
閑來沒事唆樊,用各種語言實現(xiàn)了一下窗轩,當作一個小練習,直接上代碼:
OC實現(xiàn)
-(void)quickSortWithArray:(NSMutableArray *)array left:(NSInteger)left right:(NSInteger)right{
if( left >= right ) return;
NSInteger i = left;
NSInteger j = right;
NSUInteger pivot = [[array objectAtIndex:i] integerValue];
while (i != j) {
while (i < j && [[array objectAtIndex:j] integerValue] >= pivot) {
j-- ;
}
while (i < j && [[array objectAtIndex:i] integerValue] <= pivot) {
i++ ;
}
if (i < j) {
[array exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
[array exchangeObjectAtIndex:left withObjectAtIndex:i];
[self quickSortWithArray:array left:left right:i-1];
[self quickSortWithArray:array left:i+1 right:right];
}
Swift實現(xiàn):
func quickSort(array: inout [NSInteger] , left:NSInteger , right:NSInteger ) -> () {
if left >= right {
return;
}
var i = left;
var j = right;
let pivot = array[i];
while i != j {
while i<j && array[j] >= pivot {
j -= 1 ;
}
while i<j && array[i] <= pivot {
i += 1 ;
}
if (i < j) {
array.swapAt(i, j);
}
}
array.swapAt(i, left)
self.quickSort(array: &array, left: left, right: i-1 );
self.quickSort(array: &array, left: i+1, right:right );
}
JS實現(xiàn):
function quickSort(array, left, right){
if(left >= right){
return;
}
var i = left;
var j = right;
let pivot = array[i];
while(i != j){
while (i<j && array[j] >= pivot){
j --;
}
while (i<j && array[i] <= pivot){
i ++;
}
var p = array[i] ;
array[i] = array[j];
array[j] = p ;
}
var p = array[i] ;
array[i] = array[left];
array[left] = p ;
this.quickSort(array, left, i-1);
this.quickSort(array, i+1, right);
}
python實現(xiàn):
def QuickSort(list, left, right):
if left >= right:
return
i = left;
j = right;
pivot = list[left]
while i != j:
while(i < j) and (list[j] >= pivot):
j -= 1;
while(i < j) and (list[i] <= pivot):
i += 1;
list[i],list[j] = list[j],list[i];
list[left], list[i] = list[i], list[left];
QuickSort(list, left, i-1);
QuickSort(list, i+1, right);