快排
一.確定基準值有3種
選最左或者最右的那個數作為基準值
三數取中法(就是取left,mid和right三個數中中間的那個數作為基準值)
取隨機值作為基基準值
二.將陣列分為兩部分比基準值小的放在左邊,比基準值大的放在右邊
1.hover法:b就是下面**的begin e是end
2.挖坑法:用圓圈圈的為坑
3.前後下表法:c就是**裡面的i
三.分治演算法(將乙個大問題轉化為兩個小問題)
將[ left , right ]區間分為[ left ,div-1 ]和[ div+1 , right]
四.終止條件
1.left == right 陣列裡面只剩下乙個數了為有序的
2.left < right 陣列裡沒有數了
#include#includevoid swap(int *a, int *b)
//前後座標
int parition_3(int arr, int left, int right)
} swap(arr + d, arr + right);
return d;
}//挖坑法
int parition_2(int arr, int left, int right)
arr[begin] = arr[end];
} arr[begin] = pivot;
return begin;
}//hover法
int parition_1(int arr, int left, int right)
swap(arr + begin, arr + end);
} swap(arr + begin, arr + right);
return begin;
}void quicksort(int arr, int left,int right)
int div = parition_3(arr, left, right);
quicksort(arr, left, div - 1);
quicksort(arr, div+1, right);
}int main();
int size = sizeof(arr) / sizeof(int);
int left = 0;
int right = size - 1;
quicksort(arr, left,right);
for (int i = 0; i < size; i++)
printf("\n");
system("pause");
return 0;
}
php實現快速排序的三種方法分享
寫了三種php快速排示例,第一種效率低但最簡單最容易理解,第二個是演算法導論上提供的單向一次遍歷找中值方法,第三種是雙向遍歷找中值經典快排演算法。三組演算法實現和比較如下 方法一 該方法比較直觀,但損失了大量的空間為代價,使用了效率較低的merge函式。在三種方法中效率最低。最壞情況下演算法退化為 ...
計數排序的三種方法
count sort.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std const int len 100 class countsort 計數排序類 countsort countsort length len int c...
快速排序的三種分割槽方法
快速排序運用了分治思想 分解 將陣列arr l r 劃分為兩個子陣列arr l p 1 和arr p 1 r 使得arr p 為大小居中的數,即左側arr l p 1 中的每個元素都小於等於它 而右側arr p 1 r 中的每個元素都大於等於它。其中計算下標p也是劃分過程的一部分。解決 通過遞迴呼叫...