遞迴把大問題逐步縮小,直到變成最小的同類問題的過程
1、用stl輸出全排列
#includeusing namespace std;
int main()
; sort(data,data+4);
doprintf(" ");
}while(next_permutation(data,data+4));//注意這個庫函式用法
return 0;
}
2、用遞迴求全排列
思路:比如,要寫乙個由1、2、3、4這四個數組成的全排列,可以直接暴力法,來四個for即可。
那有100、1000、10000個數呢?
也寫那麼多個迴圈嗎?
顯然,我們就要公升級。
因為每個for都是同類的,所以用遞迴。
//種種原因 盜了別人的,比我寫的更清楚
#include using namespace std;
void swap(int &a,int &b)
void perm(int list,int low,int high)
else
}}int main()
; perm(list,0,2);
return 0;
}
快速排序遞迴與非遞迴
快速排序思想 以公升序為例 在要排序的序列中選乙個基準,使它左邊的數都比它小,右邊的數都比它大。具體步驟 1 區間選乙個key,可以選區間右邊界的那個數 2 讓begin從區間左邊界開始往後找大於key的數,找到後停下來,再讓end從區間右邊界 1開始往前找小於key的數,找到後讓它和begin找的...
快速排序 遞迴與非遞迴
1.以中間值作為基準數 void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r 2.以第乙個 最後乙個數作為基準數 int part sort int q,int l,int r q l q i q i temp r...
快速排序 遞迴與非遞迴
快速排序演算法,簡稱快排,是最實用的排序演算法,沒有之一,各大語言標準庫的排序函式也基本都是基於快排實現的。快排基本思路 快速排序基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可...