算法 c語言 快速排序
#include<stdio.h>
#define N 8
void show(int a[]);
extern int quickpass(int a[],int i,int j);
extern void quicksort(int a[],int low,int high);
int main()
{
int a[N] = {50,36,66,76,36,12,25,95};
printf("原無序記錄:\n");
show(a);
printf("排序過程如下:\n");
quicksort(a,0,N-1);
return 0;
}
int quickpass(int a[],int i,int j)
{
int tmp;
tmp = a[i];//將a[i]的基值保存起來
while(i < j)
{
//從上界比較
while(i < j && tmp <= a[j])
j--;
//將a[j]交換到左邊
if(i < j)
{
a[i] = a[j];
}
//從下界比較
while(i < j && tmp >=a[i])
i++;
//將a[i]交換到右邊
if(i < j)
a[j] = a[i];
}
a[i] = tmp;//將基準放到最終位置
return i;//返回基準的下標
}
void quicksort(int a[],int low,int high)
{
int mid;
if(low < high)
{
mid = quickpass(a,low,high); //一趟快速排序
show(a);
quicksort(a,low,mid-1);//基準左邊序列快速排序
quicksort(a,mid+1,high);
}
}
void show(int a[])
{
int i;
for(i = 0;i < N;i++)
printf("%d\t",a[i]);
printf("\n");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.