#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