快速排序程式段

程式1,程式2,程式3(C語言),

程式1

輸入一組數據小到大排序
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x,t1:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

程式2

輸入一組數據小到大排序
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin b[i]:=b[j];i:=i+1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin b[j]:=b[i];j:=j-1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.

程式3(C語言)

輸入一組數據小到大排序
void quick_sort(int *array, int left, int right)
{
if(left < right)
{
int i=left,j=right; /* i,j分別為左右 游標 */
while(i != j){
/* 掃描右邊查找比比基準點小的數,如果是大的只需移動下標 */
while(i!=j && array[j]>array[i]) /* 此時基準點為 array[i] */
j--;
/* 上面的循環結束,說明在右邊找到一個比基準的小的數 */
if(i!=j){
array[j] = array[i] ^ array[j]; /* 將基準點從i處換到j處 */
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
i++; /* 當前下標為j的數字 已經被置換到下標為i的位置,而此時的這個數據小於基準點,所以i++為下一個左邊需要比較的數 */
}
while(i!=j && array[i]<array[j]) /* 此時基準點為 array[j] */
i++;
/* 上面的循環結束,說明在左邊找到一個比基準的大的數 */
if(i!=j){
array[i] = array[i] ^ array[j]; /* 將基準點從j處換到i處 */
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
j--; /* 基準點已經放到i的地方去了。下一個循環我們將比較j--處的數據是否比基準點小 */
}
};
/* 上面的循環結束,說明已經將數據安裝 {小於Key的數據}Key{大約Key的數據} 排列。此時i=j指向基準點 */
quick_sort(array, left, i-1);
quick_sort(array, i+1, right);
}
}

相關詞條

熱門詞條

聯絡我們