#include <stdio.h>
//用于查找排序的分界点并且返回该分界点的数组下标,参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
int FindMid(int*, int, int);
//进行升序的快速排序, 参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
void Quick_Sort(int*, int, int);
int main(void)
{
int i; //用于循环使用
int a[8]; //定义一个整型数组用于测试快速排序
printf("请输入8个整数:\n");
for (i = 0; i < 8; i++)
{
printf("第%d个整数为:", i + 1);
scanf("%d", &a[i]);
}
printf("\n"); //换行
Quick_Sort(a, 0, 7); //进行快速排序, 参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
puts("排序后的数组为:");
for (i = 0; i < 8; i++)
{
printf("第%d个元素为:%d\n", i + 1, a[i]);
}
printf("\n"); //换行
return 0;
}
//进行升序的快速排序, 参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
void Quick_Sort(int* a, int low, int high)
{
int pos; //用于记录排序的分界点
//检验参数的合法性
if(low < high)
{
pos = FindMid(a, low, high); //FindMid用于查找排序的分界点并且返回该分界点的数组下标,参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
Quick_Sort(a, low, pos - 1); //分界点左边元素进行升序排列
Quick_Sort(a, pos + 1, high); //分界点右边边元素进行升序排列
}
}
//用于查找排序的分界点并且返回该分界点的数组下标,参数列表为(数组地址,数组第一个元素的下标,数组最后一个元素的下标)
int FindMid(int* a, int low, int high)
{
int val = a[low]; //记录数组的第一个元素的内容
//检验参数的合法性,并控制循环
while (low < high)
{
while (low < high && val <= a[high]) //当a[high]大于或等于val时,high位置向前移动一个
{
high--;
}
a[low] = a[high];
while (low < high && val >= a[low]) //当a[low]小于或等于val时,low位置向后移动一个
{
low++;
}
a[high] = a[low];
}
a[low] = val; //将val的值存入分界点中
return low; //返回分界点的坐标
}
羊羊羊-------制作
特注:各位朋友参考为准,自己学会如何写才是初衷!
快速排序(注释详细)
最新推荐文章于 2021-11-30 13:09:59 发布