C语言快速排列求打印每一趟结果算法
最近在做题,发现老有这种求每一趟结果的题目,于是我就整理了一下,写出来了。#include <stdio.h>#define N 10//待排序个数
typedef int KeyType;//关键字类型定义
typedef struct
{
KeyType key;
}RecType;
typedef RecType SeqList;//顺序表类型
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;//用顺序表的第一个值作为基准位置
int bool1 = 0;
if (i < j)
bool1 = 1;
while (i < j)//用于左右的标识如果重叠时结束循环
{
while (i < j&&R.key >= pivot.key)//判断右边的值是否大于等于基准位置的值
{
j--;//是的话,右标识左移,直到右边比关键字小或等于,或者左右标识重叠为止
}
if (i < j)
{
R = R;//找到的话,左边的数组等于右边数组。然后左标识要右移
}
while (i < j&&R.key <= pivot.key)//判断左边的值是否小于等于基准位置的值
{
i++;//是的话,左边标识要右移,直到左边标识的值比基准位置的值小
}
if (i < j)
{
R = R;
}
}
R = pivot;//R[左指针]=R[关键字]
if (bool1)
{
printf("---------------------------\n");
for (int z = 0; z <= N-1; z++)
if(z==i)
printf("[%d],", R);
else
printf("%d,", R);
printf("\n");
}
return i;
}
void main() {
QuickSort(R, 0, N-1);
getchar();
} 虽然这类代码网上挺多的,但是毕竟这个说是楼主原创,支持一下,加油!{:301_1000:} 分享,懂QQ企鹅 新手学习了 学习了,不错
页:
[1]