快速排序 加入宏定义 方便屏蔽代码

#include <stdio.h>
#include <stdlib.h>
//#include <window.h>

#define NUMBER_COUNT 30			//改变该数字改变输入的变量数量 
#define NUMER_PER_LINE 8		//改变该数字改变每行显示的数字数量 
#define NUM_KEYIN_ENABLE 0 		//设置为0 输入为随机数 设置为1 手动输入数据 
#define DEBUG_LOOP_ENABLE 0		//设置为1 显示递归的中间变量 设置为0关闭中间变量显示 

void printf_numbers(int* _display, int _count);
void sort_bubble(int* _value);
void sort_quick(int* _value, int _count);

int main(int argc,char* argv)
{
	int value[NUMBER_COUNT];
	int i;
	for(i = 0;i < NUMBER_COUNT;i++)
	{
#if NUM_KEYIN_ENABLE
		printf("Please Enter the number of value[%d] :",i);
		scanf("%d", &value[i]);
		printf("\n");
#else 
		value[i] = rand();	//随机数范围 0-32767 
#endif
	}
	value[0] = 12000;	//定义第一个数字..... 实际操作操作中key需要另外定义 
	printf("\nBefore Sort");
	printf_numbers(value,NUMBER_COUNT);
//	sort_bubble(value);
	sort_quick(value,NUMBER_COUNT);
	printf("\nAfter Sort");
	printf_numbers(value,NUMBER_COUNT);
	return 0;
}

void sort_bubble(int* _value)//冒泡排序 
{
	int i,j,k;
	for(i = 0;i<NUMBER_COUNT;i++)
	{
		for(j = i;j<NUMBER_COUNT;j++)
		{
			if(_value[i]>_value[j])	//冒泡 
			{
				k = _value[i];
				_value[i] = _value[j];
				_value[j] = k;
			}
		}
	}
}

void sort_quick(int* _value, int _count)	//随机快速排序 
{
	int i = 0,j = _count,key = 0,temp;
	if(_count <= 1)	//用于终止递归 
		return;
	while(i < j)	
	{
		while(i < j)	//小数左移 
		{
			if(_value[key] > _value[j])
			{
				temp = _value[key];
				_value[key] = _value[j];
				_value[j] = temp;
				key = j;
				break;
			}
			j--;
		}
		while(i < j)	//大数右移 
		{
			if(_value[key] < _value[i])
			{
				temp = _value[key];
				_value[key] = _value[i];
				_value[i] = temp;
				key = i;
				break;
			}
			i++;
		} 		
	}
#if DEBUG_LOOP_ENABLE
	printf("sorted\n");
	printf_numbers(_value,_count);
	printf("to be sort\n"); 
	printf_numbers(_value,key);
	printf_numbers(&_value[key+1],_count-key-1);
#endif
	sort_quick(_value,key); //左边递归
	sort_quick(&_value[key+1],_count-key-1);//右边递归 
	return;
}

void printf_numbers(int* _display, int _count)	//加入第二参数 方便显示中间数组 
{
	int i;
	for(i = 0; i<_count;i++)
	{
		if((i%_count)==0)
			printf("\n");	//控制换行 
		printf("%5d\t",_display[i]);
	}
	printf("\n"); 
}

转载于:https://my.oschina.net/mummy108/blog/113235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值