C++快排法,这里排序后少打印一位数,不知道那里出了问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 13:44:00
#define MAXN 20
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

/* 对数组 a 中的第 low 至第 up 个元素进行快速排序 */
void quick_sort(int a[], int low, int up)
{
int i, j;
int t;

if(low < up)
{
/* 如果有元素需要排序 */
/* 设置基本标志 */
i = low;
j = up;

/* 将首个元素设为控制值,同时形成空位 */
t = a[low];

while(i != j)
{
/* 移动右侧的下标标志 */
while(i < j && a[j] > t)
j--;
/* 找到比控制值小的值,移动到空位 */
if(i < j)
a[i++] = a[j]; //将最大数放到第一位

/* 移动左侧的下标标志 */
while(i < j && a[i] <= t)
i++;
/* 找到比控制值大的值,移动到空位 */
if(i < j)
a[j--] = a[i];
}

这个程序好眼熟啊,你抄的我网站上的吧。

确实有问题,有时会丢掉要排的元素.
不过貌似算法是没有问题的,错误在于主函数里的调用:quick_sort(data, 0, n);
应为quick_sort(data, 0, n-1);