快速排序-c代码
#include <stdio.h>
#define exchange(a,b) if(a != b){ a = a ^ b; b = a ^ b; a = a ^ b; };
int * quick_sort(int *A, int start, int end);
int partition(int *A, int start, int end);
int main()
{
int A[10] = {3,6,10,8,4,2,7,1,9,5};
int i,*c;
c = quick_sort(A, 0, 9);
for(i = 0; i < 10; i++){
printf("index:%d c:%d\n", i, c[i]);
}
return 0;
}
int * quick_sort(int *A, int start, int end)
{
int middle;
if(start < end){
middle = partition(A, start, end);
quick_sort(A, start, middle-1);
quick_sort(A, middle+1, end);
}
return A;
}
//原地重排
int partition(int *A, int start, int end)
{
int x = A[end];
int i = start-1;
int j;
for(j = start; j < end; j++){
if(A[j] < x){
i++;
exchange(A[i], A[j]);
}
}
i++;
exchange(A[i], A[end]);
return i;
}
//Hoare划分
int hoare_partition(int *A, int start, int end)
{
int x = A[start];
int i = start-1;
int j = end+1;
while(1){
do{
j = j - 1;
} while (A[j] < x);
do{
i = i + 1;
} while (A[i] > x);
if(i < j){
exchange(A[i], A[j]);
}else{
break;
}
}
return j;
}
#define exchange(a,b) if(a != b){ a = a ^ b; b = a ^ b; a = a ^ b; };
int * quick_sort(int *A, int start, int end);
int partition(int *A, int start, int end);
int main()
{
int A[10] = {3,6,10,8,4,2,7,1,9,5};
int i,*c;
c = quick_sort(A, 0, 9);
for(i = 0; i < 10; i++){
printf("index:%d c:%d\n", i, c[i]);
}
return 0;
}
int * quick_sort(int *A, int start, int end)
{
int middle;
if(start < end){
middle = partition(A, start, end);
quick_sort(A, start, middle-1);
quick_sort(A, middle+1, end);
}
return A;
}
//原地重排
int partition(int *A, int start, int end)
{
int x = A[end];
int i = start-1;
int j;
for(j = start; j < end; j++){
if(A[j] < x){
i++;
exchange(A[i], A[j]);
}
}
i++;
exchange(A[i], A[end]);
return i;
}
//Hoare划分
int hoare_partition(int *A, int start, int end)
{
int x = A[start];
int i = start-1;
int j = end+1;
while(1){
do{
j = j - 1;
} while (A[j] < x);
do{
i = i + 1;
} while (A[i] > x);
if(i < j){
exchange(A[i], A[j]);
}else{
break;
}
}
return j;
}
php代码
$a = [3,2,4,7,6,8,5,9,1];
function quick_sort($a, $start, $end){
if ($start < $end) {
$mid = partition($a, $start, $end);
quick_sort($a, $start, $mid-1);
quick_sort($a, $mid+1, $end);
}
return $a;
}
function partition($a, $start, $end) {
$x = $a[$end];
$i = $start-1;
for ($j = $start; $j < $end; $j++) {
if ($a[$j] < $x) {
$i++;
exchange($a[$i], $a[$j]);
}
}
$i++;
exchange($a[$i], $a[$end]);
return $i;
}
function exchange(&$x, &$y) {
$x = $x ^ $y;
$y = $x ^ $y;
$x = $x ^ $y;
}
function quick_sort($a, $start, $end){
if ($start < $end) {
$mid = partition($a, $start, $end);
quick_sort($a, $start, $mid-1);
quick_sort($a, $mid+1, $end);
}
return $a;
}
function partition($a, $start, $end) {
$x = $a[$end];
$i = $start-1;
for ($j = $start; $j < $end; $j++) {
if ($a[$j] < $x) {
$i++;
exchange($a[$i], $a[$j]);
}
}
$i++;
exchange($a[$i], $a[$end]);
return $i;
}
function exchange(&$x, &$y) {
$x = $x ^ $y;
$y = $x ^ $y;
$x = $x ^ $y;
}
转载请注明:小Y » 算法导论7.1-快速排序