首页 > 试题广场 >

请补全下面的快速排序代码,答案中请不要包含空格。

[填空题]
请补全下面的快速排序代码,答案中请不要包含空格。
void qsort(int *array, int len)
{
    int value, start, end;
    if (len <= 1) 
        return; 
    value = array[0]; 
    start = 0; 
    end = len - 1; 
    while (start < end) { 
        for (; start < end; --end) { 
            if (array[end] < value) { 
                1 
                break; 
            } 
        } 
        for (; start < end; ++start) { 
            if (array[start] > value)
            {
                2
                break;
            }
        }
    }
    3
    qsort(array, 4);
    qsort(5, 6);
}

推荐

答案:

array[start++] = array[end];
array[end--] = array[start];
array[start] = value;
start
array+start+1, len-start-1

发表于 2014-10-25 00:26:03 回复(10)
  1. #include<iostream>   
  2. using   namespace  std;  
  3. void  quickSort( int  a[], int , int );  
  4. int  main()  
  5. {  
  6.     int  array[]={34,65,12,43,67,5,78,10,3,70},k;  
  7.     int  len= sizeof (array)/ sizeof ( int );  
  8.     cout<<"The orginal arrayare:" <<endl;  
  9.     for (k=0;k<len;k++)  
  10.         cout<<array[k]<<"," ;  
  11.     cout<<endl;  
  12.     quickSort(array,0,len-1);  
  13.     cout<<"The sorted arrayare:" <<endl;  
  14.     for (k=0;k<len;k++)  
  15.         cout<<array[k]<<"," ;  
  16.     cout<<endl;  
  17.     system("pause" );  
  18.     return  0;  
  19. }  
  20.   
  21. void  quickSort( int  s[],  int  l,  int  r)  
  22. {  
  23.     if  (l< r)  
  24.     {        
  25.         int  i = l, j = r, x = s[l];  
  26.         while  (i < j)  
  27.         {  
  28.             while (i < j && s[j]>= x)  // 从右向左找第一个小于x的数   
  29.                 j--;   
  30.             if (i < j)  
  31.                 s[i++] = s[j];  
  32.             while (i < j && s[i]< x)  // 从左向右找第一个大于等于x的数   
  33.                 i++;   
  34.             if (i < j)  
  35.                 s[j--] = s[i];  
  36.         }  
  37.         s[i] = x;  
  38.         quickSort(s, l, i - 1); // 递归调用   
  39.         quickSort(s, i + 1, r);  
  40.     }  
  41. }  
发表于 2017-06-12 14:24:14 回复(1)
标准答案依次是:
  1. array[start++] = array[end];
  2. array[end--] = array[start];
  3. array[start] = value;
  4. start;
  5. array+start+1,len-start-1;
我的答案:
  1. array[start]=array[end];
  2. array[end]=array[start];
  3. array[start]=value;
  4. start-1
  5. &(array[start+1])
  6. len-start
开始以为自己错了,后来细细分析一下,这两个答案是一样的,标准答案是array[start++] = array[end]是先进行赋值语句array[start] = array[end],然后再把start自加。实则含义与我的代码中,先赋值,再把start-1传到qsort()函数中,实现的效果是一样的。




发表于 2015-08-21 09:37:40 回复(7)
第四个 为何不是start+1而是start? start从0开始,长度应该是start+1呀?
发表于 2015-12-28 13:12:23 回复(5)
array[start] = array[end];//start不++也可以吧 顶多重复比较一次
array[end] = array[start];//同理
array[start] = value;
start
array+start+1;
len-start-1
编辑于 2015-08-25 10:45:39 回复(0)
这样的快排和我学的真不一样,思维定式了

发表于 2017-03-09 15:05:58 回复(0)
本题也可以是这样的答案
1.array[start]=array[end];
2.array[end]=array[start];
3.array[end]=value;
4.end
5.array+start+1
6.len-start-1
发表于 2015-08-19 16:21:24 回复(1)
array[start++] = array[end];
array[end--] = array[start];
array[start] = value;
start;
array+start+1,len-start-1;

发表于 2015-05-10 21:52:49 回复(0)
看这篇博文讲的狠详细的http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html

发表于 2015-04-01 22:23:25 回复(0)
 
发表于 2017-07-15 23:42:20 回复(0)
这个答案是啥意思?
发表于 2017-06-02 16:17:06 回复(0)
为什么我这里一共要填六个空,答案给我出来16个。。
发表于 2017-02-27 13:05:20 回复(0)

/*
     * 1、先选定并记住主元,start指向左边第一个元素,end指向右边第一个元素;
     * 2、则从最右边第一个元素(end)开始判断,如果比主元大,则end--,反之则将end指的元素赋值给start指的元素,并且start++;
     * 3、然后从左边(start)开始判断,如果比主元小,则start++,反之则将start指的元素赋值给end指的元素,并且end--;
     * 4、一直重复2,3两步,直到条件start<end不再满足为止;这时就可以把主元赋值给start指的元素;
     * 5、这时就完成了主元左右两个子集的划分,然后可以对左右两个子集进行递归操作,完成排序;
     */

public static void solve2(int[] array,int start,int end){
        int len = end-start+1;
        if (len <= 1)
            return;
        int main = start;
        int value = array[main];
        while (start < end) {
            for (; start < end; --end) {
                if (array[end] < value) {
                     array[start++] = array[end];
                    break;
                }
            }
            for (; start < end; ++start) {
                if (array[start] > value)
                {
                    array[end--] = array[start];
                    break;
                }
            }
        }
        array[start] = value;
        solve2(array, 0,start-1 );
        solve2(array,start+1,len-1);
    }

通过下列语句调用:solve2(a, 0, a.length-1);
发表于 2016-12-20 20:17:43 回复(0)
start(array[0]-array[start-1])
表示前一段数组中元素的个数 
中间是array[start]
len-start-1(array[start+1]-array[len-1])
表示后一段数组中元素的个数
发表于 2016-08-22 23:10:05 回复(0)
array[start++]=array[end];
array[end--]=array[start];
array[start]=value;
start
array+start+1
len-start-1
发表于 2016-08-22 16:12:13 回复(0)
#include <stdio.h>
#include <stdlib.h>

#define MaxSize 1000

void QuickSort(int *array,int len)
{
	int value,start,end;
	
	 if (len <= 1) 
        return; 
        
	start=0;
	end=len-1;
	
	value=array[0];
	
	while(start<end)
	{
		while(start<end)
		{
			if(array[end]<value)
			{
				array[start]=array[end];
				start++;
				break;
			}
			else
			    end--;
		}
	while(start<end)
		{
			if(array[start]>value)
			{
				array[end]=array[start];
				end--;
				break;
			}
			else
			    start++;
		}
	}
	array[start]=value;
	
	QuickSort(array,start);
	QuickSort(array+start+1,len-start-1);
}


int main()
{
    int a[MaxSize];
    int n,i,j;
	scanf("%d",&n);
	
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}	
	
    QuickSort(a,n);
	
    for(i=0;i<n;i++)
	{
		printf("%d\n",a[i]);
	}
	return 0;
}
	
	
题目里给的答案编程实现也不对啊~~~~(>_<)~~~~
发表于 2016-04-20 16:16:42 回复(0)
我的前三个空和大家是一样的,第4空填的是start-1,第5个空是array+start,第6个空是len-start,为什么错了呢?我觉得也可以啊!求大牛解答
发表于 2015-08-20 14:12:13 回复(2)
int value;此句另外开辟了一个存放int型值的空间,并存放array[0]的值,使得array[0]可以被覆盖掉,由于先从array[end]开始,当有比value小的值时,array[0]被array[end]覆盖掉,此时array[end]值已经存放在array[0]里所以可以被覆盖掉,这样就省去了使用中间值进行交换的过程。
发表于 2015-08-18 22:20:46 回复(0)
千万记得细节,不要忘记分号
发表于 2015-07-25 16:04:50 回复(0)
array+start+1是什么意思?数组怎么可以和int相加呢?求指点
编辑于 2015-07-25 16:10:58 回复(4)
 len-1-start 参考答案 len-start-1 有区别吗???

发表于 2015-06-30 00:05:40 回复(0)