快速排序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 08:44:32
#include <iostream>
#include <stdio.h>
using namespace std;

void improveqsort(int *list,int m,int n)
{
int k,t,i,j;
if (m < n)
{
i = m;
j = n+1;
k = list[m];
while (i < j)
{
for (i = i+1;i < n;i++)
if (list[i] >= k)
break;
for (j = j-1; j > m; j--)
if (list[j] <= k)
break;
if (i < j)
{
t = list[i];list[i] = list[j]; list[j] = t;
}

}
t = list[m];list[m] = list[j]; list[j] = t;
improveqsort(list,m,j-1);
improveqsort(list,i,n);
}
}

int main()
{
int list[10];
int n = 9, m = 0, i;
printf(" input 10 number: ");
for (i = 0; i < 10; i++)
scanf("%d",&list[i]);
printf("\n");
improveqsort(list,m,n);
for (i = 0; i < 10; i++)
printf(&

不清楚你知不知道快速排序的算法描述,得先知道这个才容易看懂这个算法的,这里说一下
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

好了,下面说一下这个程序
#include <iostream>
#include <stdio.h>//包含头文件
using namespace std;

void improveqsort(int *list,int m,int n)
{//快速排序函数,其中list是需要排序的序列,m和n是需要排序的开始和结束,就是说排列list数组中,m到n的这一部分
int k,t,i,j;
if (m < n)
{//如果m<n才需要排列,否则直接退出函数
i = m;//i标记从m到n
j = n+1;//j标记从n到m
k = list[m];//k为一个基准量,所有在右边k小的和在左边比k大的交换
while (i < j)
{//i如果大于j说明排列结束,整个序列都是左边比k小,右边比k大
for (i = i+1;i < n;i++)//这个从m开始找比k大的,找到就结束
if (list[i] >= k)
break;
for (j = j-1; j > m; j--)//这个从n开始找比k小的,找到就结束
if (list[j] <= k)
break;
if (i < j)
{//如果i小于j.两个数就交换
t = list[i];list[i] = list[j]; list[j] = t;
}

}
t = list[m];list[m] =