我在實現二分法快速排序的時候,最初的程式是這樣的。
#include
using
namespace std;
void
qsort
(int arr,
int left,
int right)
while
(l < r && arr[l]
<= value)l++;if
(arr[l]
> value)
}while
(l != r)
; arr[l]
= value;
qsort
(arr,left,r--);
qsort
(arr,l++
,right);}
int a[
100]
;int
main()
這時的報錯有/bin/sh: line 1: 12518 segmentation fault: 11
據說是因為記憶體越界?
檢查發現,我把邊界點寫錯了qsort(arr,left,r--); qsort(arr,l++,right);
大錯特錯,還忘了寫遞迴邊界
修改後
#include
using
namespace std;
void
qsort
(int arr,
int left,
int right)
while
(l < r && arr[l]
<= value)l++;if
(arr[l]
> value)
}while
(l != r)
; arr[l]
= value;
qsort
(arr,left,l-1)
;qsort
(arr,r+
1,right);}
int a[
100]
;int
main()
就ac了
好喜歡這一句話
C 快速(二分法)排序
快速 二分法 排序的思想是將陣列劃分為兩邊,以某個節點v為界 設這個節點的值為 v 在節點v左邊的所有元素都小於 v,在節點v右邊的所有元素都大於v.這樣不停地劃分,到最後整個陣列就是有序的了。具體分成兩邊的思路為 起始下標為start,結束下標為 end 選擇v a end 作為中介點 先從sta...
二分法 選擇排序 快速排序
最近看了 演算法 覺得很棒,做一些總結記錄。coding utf 8 import random author chenk class algorithme def init self self.low 0 self.high 10000 def get random num self return...
二分法排序C
首先說一下二分法排序的原理,演算法思想簡單描述 在插入第i個元素時,對前面的0 i 1元素進行折半,先跟他們 中間的那個元素比,如果小,則對前半再進行折半,否則對後半 進行折半,直到left right,然後再把第i個元素前1位與目標位置之間 的所有元素後移,再把第i個元素放在目標位置上。二分法排序...