個人總結的兩種寫法,比較傾向於partition1, 乙個邊界畢竟比兩個邊界好控制。此處**基於c++, 其實也就是用了個vector而已,隨便改改其他語言都可以。
好多寫法都可以滿足普通情況,但不滿足特殊用例測試:1,1,1,3這種。
共享。
#include "stdafx.h"
#include "iostream"
#include
using
namespace
std;
int main()
; vector
&nums = arr;
int n = nums.size();
nums = quicksort(nums, 0, n - 1);
cout
<< "sorted array: \n"
<< endl;
printarray(nums, n);
return0;}
void printarray(vector
& nums, int size)
void swap(vector
& nums, int a, int b)
int partition1(vector
& nums, int begin, int end)
j++;
}swap(nums, i, end);
return i;
}int partition2(vector
& nums, int begin, int end)
while (nums[j] >= pivot && j > i)
if (i >= j)
swap(nums, i, j);
}swap(nums, i, end);
return i;
}vector
& quicksort(vector
& nums, int begin, int end)
return nums;
}
快速排序的寫法
面試中乙個頻率極高的問題就是要手寫快速排序,實際上涉及下標變換的 極其容易寫錯,基本上涉及整數下標操作的問題都算是難度中等偏上的了。對於一些經典問題,我們要時不時的去練習,這裡給出演算法導論上的和stl中實現的快速排序的兩種不同寫法。template size t partition t a,siz...
快速排序的遞迴寫法
快速排序 遞迴 遞迴思想 單趟來說,begin找比key大的,end找比key小的,當各自都找到的時候,若begin比end小,則交換兩個資料,然後繼續找,當再找到的時候,如果 begin比end大,則比較a begin 和key的值,若a begin 大於key,說明 a begin 的位置應該是...
ViewHolder模式簡潔寫法
參考 在安卓中 自定義adapter時,使用viewholder可快取每個item的view,減少一些不必要的操作,提高效能。在網上看到一種比較簡潔的寫法,避免每個自定義的adapter定義 viewholder實體類。importandroid.util.sparsearray importand...