通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为()。A、快速排序B、冒泡排序C、简单选择排序D、归并排序

题目
通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为()。

A、快速排序

B、冒泡排序

C、简单选择排序D、归并排序


相似考题

3.阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】下面的程序利用快速排序中划分的思想在整数序列中找出第 k 小的元素(即 将元素从小到大排序后,取第 k 个元素)。对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数 作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准 值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和 右子序列分别进行快速排序,最终得到非递减的有序序列。例如,整数序列“19, 12, 30, 11,7,53, 78, 25"的第 3 小元素为 12。整数序列“19, 12,7,30, 11, 11,7,53. 78, 25, 7"的第 3 小元素为 7。函数 partition(int a[], int low,int high)以 a[low]的值为基准,对 a[low]、 a[low+l]、…、a[high]进行划分,最后将该基准值放入 a[i] (low≤i≤high),并 使得 a[low]、a[low+l]、,..、A[i-1]都小于或等于 a[i],而 a[i+l]、a[i+2]、..、 a[high]都大于 a[i]。函 教 findkthElem(int a[],int startIdx,int endIdx,inr k) 在 a[startIdx] 、 a[startIdx+1]、...、a[endIdx]中找出第 k 小的元素。【代码】#include #include Int partition(int a [],int low, int high){//对 a[low..high]进行划分,使得 a[low..i]中的元素都不大于 a[i+1..high]中的 元素。int pivot=a[low]; //pivot 表示基准元素 Int i=low,j=high;while(( 1) ){While(ipivot)--j; a[i]=a[ j] While(ipivot)++i; a[ j]=a[i]}(2) ; //基准元素定位 return i;}Int findkthElem(int a[],int startIdx,int endIdx, int k){//整数序列存储在 a[startldx..endldx]中,查找并返回第 k 小的元素。if (startldxendIdx || kendIdx||k-1 if (loc==k-1) ∥找到第 k 小的元素return (3) ;if(k-l 小的元素}return 0;}

更多“通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为()。 ”相关问题
  • 第1题:

    阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    [说明]
    对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。
    函数quicksort(int a[],int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组元素a[0]~a[n-1]中。

    [C代码] #inclLade<stdi0.h> void quicksort(inta[], int n) { int i,j; int pivot=a[0]; //设置基准值 i=0; j=n-1; while (i<j){ while (i<1 && ______) j--; //大于基准值者保持在原位置 if (i<j) { a[i] =a[j]; i++;} while(i<j&& ______) i++; //不大于基准值者保持在原位置 if (i<1) { a[j] =a[i]; 1--;} } a[i]=pivot; //基准元素归位 if (i>1 ) ______; //递归地对左孔序列进行快速排序 if (n-i-1>1 ) ______; //递归地对右孔序列进行快速排序 } int main() { int i, arr[]={23,56,9,75,18,42,11,67}; quicksort(______); //调用quicksort对数组arr[]进行排序 for( i=0; i<sizeof(arr)/sizeof(int); i++ ) printf("%d\t",arr[i]); return 0; }


    答案:
    解析:
    a[j]>pivot 或 a[j]>=pivot 或等价形式
    a[i]<=pivot 或 a[i]<pivot 或等价形式
    quicksort(a,i) 或 quicksort(a,j) 或等价形式
    quicksort(a+i+1,n-i-1) 或 quicksort(a+j+1,n-j-1) 或等价形式
    注:a+i+1可表示为&a[i+1],a+j+1可表示为&a[j+1]
    arrsizeof(arr)/sizeof(int)
    注:sizeof(arr)/sizeof(int)可替换为8

    【解析】

    本题考查C程序设计基本技能及快速排序算法的实现。
    题目要求在阅读理解代码说明的前提下完善代码,该题目中的主要考查点为运算逻辑和函数调用的参数处理。
    程序中实现快速排序的函数为quicksort,根据该函数定义的首部,第一个参数为数组参数,其实质是指针,调用时应给出数组名或数组中某个元素的地址;第二个参数为整型参数,作用为说明数组中待排序列(或子序列)的长度。
    快速排序主要通过划分来实现排序。根据说明,先设置待排序列(或子序列,存储在数组中)的第一个元素值为基准值。划分时首先从后往前扫描,即在序列后端找出比基准值小或相等的元素后将其移到前端,再从前往后扫描,即在序列前端找出比基准值大的元素后将其移动到后端,直到找出基准值在序列中的最终排序位置。再结合注释,空(1)处应填入"a[j]>pivot",使得比基准值大者保持在序列后端。空(2)处应填入"a[i]<=pivot",使得不大于基准值者保持在前端。
    在完成1次划分后,基准元素被放入a[i],那么分出来的左子序列由a[0]~a[i-1]这i个元素构成,右子序列由a[i+1]~a[n-1]构成,接下来应递归地对左、右子序列进行快排。因此,结合注释,空(3)应填入"quicksort(a,i)"或其等价形式,以对左子序列的i个元素进行快排,也可以用&a[0]代替其中的a,它们是等价的,a与&a[0]都表示数组的起始地址。
    空(4)所在代码实现对右子序列进行快排。右子序列由a[i+1]~a[n-1]构成,其元素个数为n-1-(i+1)+1,即n-i-1,显然元素a[i+1]的地址为&a[i+1]或a+i+1,所以空(4)应填入"quicksort(a+i+1,n-i-1)"或其等价形式。
    在main函数中,空(5)所在代码首次调用函数quicksort对main函数中的数组arr进行快排,因此应填入"arr,sizeof(arr)/sizeof(int)"或其等价形式。

  • 第2题:

    通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为( )。

    A.快速排序
    B.冒泡排序
    C.归并排序
    D.简单选择排序

    答案:A
    解析:
    快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

  • 第3题:

    通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为( )。

    A.快速排序
    B.冒泡排序
    C.简单选择排序
    D.归并排序

    答案:A
    解析:

  • 第4题:

    根据枢轴元素(或基准元素)划分序列而进行排序的是( )。

    A.快速排序
    B.冒泡排序
    C.简单选择排序
    D.直接插入排序

    答案:A
    解析:
    本题考查数据结构与算法基础知识。
    快速排序的基本思想是:通过一趟排序将待排的记录划分为独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序。
    划分时从待排序列中选一个元素作为枢轴元素,将不大于枢轴元素者和不小于枢轴元素者分开。

  • 第5题:

    通过设置基准(枢轴)元素将待排序的序列划分为两个子序列,使得其一个子序列的元素均不大于基准元素,另一个子序列的元素均不小于基准元素,然后再分别对两个子序列继续递归地进行相同思路的排序处理,这种排序方法称为( )。

    A.快速排序
    B.冒泡排序
    C.简单选择排序
    D.归并排序

    答案:A
    解析:
    快速排序的基本思想是,通过一轮的排序将序列分割成独立的两部分,其中一部分序列的关键字(这里主要用值来表示)均比另一部分关键字小。继续对长度较短的序列进行同样的分割,最后到达整体有序。在排序过程中,由于已经分开的两部分的元素不需要进行比较,故减少了比较次数,降低了排序时间。详细描述:首先在要排序的序列a中选取一个中轴值,而后将序列分成两个部分,其中左边的部分b中的元素均小于或者等于中轴值,右边的部分c的元素均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。