快速排序算法代码

一下是写的一个快速排序算法代码,用eclipse for c IDE写的,发上来分享下 ,正在准备期末考呢,以后有空我多来些博客
/*
 * quickSort.c
 *
 *  Created on: 2012-4-9
 *      Author: LW
 */
#include <stdio.h>
#include <string.h>

typedef struct _student
{
	int id;
	char name[30];
}student,*pStudent;

student students[20] =
{
	{13,"狐狸金"},{15,"杜十娘"},{8,"葫芦娃"},{4,"喜羊羊"},
	{14,"叮当猫"},{18,"孙悟空"},{3,"格列佛"},{6,"咖啡猫"},
	{19,"猪八戒"},{11,"程序员"},{5,"鲁滨逊"},{9,"金枪鱼"},
	{10,"马大哈"},{12,"周星星"},{1,"灰太狼"},{2,"唐老鸭"},
	{20,"子虚君"},{16,"乌有君"},{7,"小二郎"},{17,"贾宝玉"},
};

//students[]是需要进行排序的数组,length是students数组的元素个数
void quickSort(student students[],int length)
{
	int i,j,flag = students[0].id;
	student stutemp;
	int t;

	if(length>1)
	{
		for(t=0;t<length;t++)
		{
			printf("%d   ",students[t].id);
		}
		printf("\n");

		//为分区选好分裂点
		for(i=0,j=length-1;i<j;)
		{
			for(;students[i].id<flag;i++);
			for(;students[j].id>flag;j--);

			stutemp.id = students[j].id;
			strcpy(stutemp.name,students[j].name);

			students[j].id = students[i].id;
			strcpy(students[j].name,students[i].name);

			students[i].id = stutemp.id;
			strcpy(students[i].name,stutemp.name);
		}

		//打印排序过程
		for(t=0;t<length;t++)
		{
			printf("%d   ",students[t].id);
		}
		printf("----排序后\n-----------------------------------中轴:%d 中轴下标:%d\n",flag,j);

		//进行分区并对分区进行递归调用quickSort,在原数组空间里进行操作
		quickSort(&students[0],j+1);
		quickSort(&students[j+1],length-j-1);
	}
}

int main()
{
	int i;

	//排序前打印
	printf("排序前:\n");
	for(i=0;i<20;i++)
	{
		printf("%d  %s\t",students[i].id,students[i].name);
		if(!((i+1)%5))
		{
			printf("\n");
		}
	}

	quickSort(students,20);

	//排序后打印
	printf("__________________________________________________________________\n排序后:\n");
	for(i=0;i<20;i++)
	{
		printf("%d  %s\t",students[i].id,students[i].name);
		if(!((i+1)%5))
		{
			printf("\n");
		}
	}

	return 0;
}

你可能感兴趣的:(算法,快速排序,C语言)