c语言快速自动对齐,C语言快速排列求打印每一趟结果算法

[C] 纯文本查看 复制代码#include

#define N 10//待排序个数

typedef int KeyType;//关键字类型定义

typedef struct

{

KeyType key;

}RecType;

typedef RecType SeqList[N + 1];//顺序表类型

SeqList R = {10,18,4,3,6,12,1,9,18,8};

void QuickSort(SeqList R, int low, int high)//快速排序(两个函数递归)

{

int pivot;//基准位置

if (low < high)

{//位置大于1才需要排序

pivot = Partition(R, low, high);//调用划分函数

QuickSort(R, low, pivot-1);//最低和基准位置的排序

QuickSort(R, pivot + 1, high);//最高和基准位置右边之间的排序

}

}

int Partition(SeqList R, int i, int j)//划分函数(用于返回基准位置,并排序)

{//1.判断右边是否小于关键字,是的话,R[左指针]=R[右指针]。左指针右移

//2.判断左边是否大于关键字,是的话,R[右指针]=R[左指针]。右指针左移

//3.R[左指针]=R[关键字]

RecType pivot = R[i];//用顺序表的第一个值作为基准位置

int bool1 = 0;

if (i < j)

bool1 = 1;

while (i < j)//用于左右的标识如果重叠时结束循环

{

while (i < j&&R[j].key >= pivot.key)//判断右边的值是否大于等于基准位置的值

{

j--;//是的话,右标识左移,直到右边比关键字小或等于,或者左右标识重叠为止

}

if (i < j)

{

R[i++] = R[j];//找到的话,左边的数组等于右边数组。然后左标识要右移

}

while (i < j&&R[i].key <= pivot.key)//判断左边的值是否小于等于基准位置的值

{

i++;//是的话,左边标识要右移,直到左边标识的值比基准位置的值小

}

if (i < j)

{

R[j--] = R[i];

}

}

R[i] = pivot;//R[左指针]=R[关键字]

if (bool1)

{

printf("---------------------------\n");

for (int z = 0; z <= N-1; z++)

if(z==i)

printf("[%d],", R[z]);

else

printf("%d,", R[z]);

printf("\n");

}

return i;

}

void main() {

QuickSort(R, 0, N-1);

getchar();

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值