您的位置:首页 > 编程语言

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

2013-03-12 00:00 106 查看
#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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 C