您的位置:首页 > 理论基础

2008秋-计算机软件基础-快速排序

2007-10-21 20:13 381 查看
快速排序c语言源程序之一

// 快速排序

// 使用递归调用来实现快速排序

// Author: eman lee

/*Quick Sort */

#include <stdio.h>

void quick_sort(int data[], int low, int high)

{

int i, j, pivot;

if (low < high)

{

pivot=data[low];

i=low;

j=high;

while(i<j)

{

while (i<j && data[j]>=pivot)

j--;

if(i<j)

data[i++]=data[j]; //将比枢轴记录小的记录移到低端

while (i<j && data[i]<=pivot)

i++;

if(i<j)

data[j--]=data[i]; //将比枢轴记录大的记录移到高端

}

data[i]=pivot; //枢轴记录移到最终位置

quick_sort(data,low,i-1);

quick_sort(data,i+1,high);

}

}

void main()

{

int i;

int data[9] = {54,38,96,23,15,72,60,45,83};

for(i=0;i<9;i++)

{

printf(" %d ",data[i]);

}

printf("\n");

quick_sort(data, 0, 8);

for(i=0;i<9;i++)

{

printf(" %d ",data[i]);

}

}

快速排序c语言源程序之二

// 快速排序

// 使用递归调用来实现快速排序

// 10/21/2007

// Author: eman lee

/*Quick Sort */

#include <stdio.h>

struct node

{

int key;

int other;

};

typedef struct node SeqListNode;

//划分算法

int Partition(SeqListNode R[],int i,int j)

{

SeqListNode pivot=R[i];

while(i<j)

{

while(i<j&&R[j].key>=pivot.key)

j--;

if(i<j)

R[i++]=R[j];

while(i<j&&R[i].key<=pivot.key)

i++;

if(i<j)

R[j--]=R[i];

} //endwhile

R[i]=pivot;

return i;

}

//快速排序算法

void QuickSort(SeqListNode R[],int low,int high)

{

int pivotpos;

if(low<high)

{

pivotpos=Partition(R,low,high);

QuickSort(R,low,pivotpos-1);

QuickSort(R,pivotpos+1,high);

}

}

void main()

{

int i;

SeqListNode data[9] = {{54,11},{38,22},{96,33},{23,44},{15,55},{72,66},{60,77},{45,88},{83,99}};

for(i=0;i<9;i++)

{

printf(" %d ",data[i].key);

}

printf("\n");

QuickSort(data,0,8);

for(i=0;i<9;i++)

{

printf(" %d ",data[i].key);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: