快速排序(C语言)

1.遍历输出

void printArray(int array[],int length)
{/*参数一:数组
参数二:数组长度*/
	int i;
	for(i=0;i<length;i++)
	{
		printf("%d ",array[i]);
	}
	printf("\n");
}

 2.一趟排序操作

int partition(int array[],int i,int j)
{/*参数一:数组
参数二:需要操作的第一个位置下标 
参数三:需要操作的最后一个位置下标*/
	int x = array[i];//首元素作为基准元素 
	while(i<j)
	{/*外层循环,当i和j相等时,说明已经遍历一轮,
	此时基准元素左边的都小,基准元素右边的都大*/
		while(i<j&&array[j]>x)//从右往左找第一个小于基准元素的元素下标 
			j--;
		if(i<j)
		{
			array[i] = array[j];//将该元素放置到i元素位置 
			i++;
		}
		while(i<j&&array[i]<x)//从左往右找第一个大于基准元素的元素下标 
			i++;
		if(i<j)
		{
			array[j] = array[i];//将该元素放置到j元素位置 
			j--;
		}
	}
	array[i] = x;//将基准元素放置到中间位置(i) 
	return i;//返回基准元素的位置下标 
}

 3.总排序操作

void quickSort(int array[],int i,int j)
{/*参数一:数组
参数二:起始元素下标
参数三:结束元素下标*/
	static int count = 1; 
	if(i<j)
	{
		int index = partition(array,i,j);//找基准元素的位置下标
		printf("第%d轮:",count);
		count++; 
		printArray(array,8);
		quickSort(array,i,index-1);//递归,排序左边数组 
		quickSort(array,index+1,j);//递归,排序右边数组 
	}
}

4.主函数

int main()
{
	int array[8] = {27,38,13,49,76,97,65,49};
	quickSort(array,0,7);
	return 0;
}

 5.完整代码:

#include <stdio.h>
#include <stdlib.h>
/*遍历输出*/
void printArray(int array[],int length)
{/*参数一:数组
参数二:数组长度*/
	int i;
	for(i=0;i<length;i++)
	{
		printf("%d ",array[i]);
	}
	printf("\n");
}
/*一趟排序操作*/
int partition(int array[],int i,int j)
{/*参数一:数组
参数二:需要操作的第一个位置下标 
参数三:需要操作的最后一个位置下标*/
	int x = array[i];//首元素作为基准元素 
	while(i<j)
	{/*外层循环,当i和j相等时,说明已经遍历一轮,
	此时基准元素左边的都小,基准元素右边的都大*/
		while(i<j&&array[j]>x)//从右往左找第一个小于基准元素的元素下标 
			j--;
		if(i<j)
		{
			array[i] = array[j];//将该元素放置到i元素位置 
			i++;
		}
		while(i<j&&array[i]<x)//从左往右找第一个大于基准元素的元素下标 
			i++;
		if(i<j)
		{
			array[j] = array[i];//将该元素放置到j元素位置 
			j--;
		}
	}
	array[i] = x;//将基准元素放置到中间位置(i) 
	return i;//返回基准元素的位置下标 
}
/*总排序操作*/
void quickSort(int array[],int i,int j)
{/*参数一:数组
参数二:起始元素下标
参数三:结束元素下标*/
	static int count = 1; 
	if(i<j)
	{
		int index = partition(array,i,j);//找基准元素的位置下标
		printf("第%d轮:",count);
		count++; 
		printArray(array,8);
		quickSort(array,i,index-1);//递归,排序左边数组 
		quickSort(array,index+1,j);//递归,排序右边数组 
	}
}
int main()
{
	int array[8] = {27,38,13,49,76,97,65,49};
	quickSort(array,0,7);
	return 0;
}

 6.运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值