习题-数据结构快速排序问题

问题描述

数据结构快速排序问题
设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为(  )。
    (A) 2,3,5,8,6       (B) 3,2,5,8,6
    (C) 3,2,5,6,8       (D) 2,3,6,5,8
    能画出具体图么,答案是C,实在不能理解

解决方案

严格来说,这个题目根本就是错的。出题的人根本就不会编程序。
不同的交换算法得到的结果不同,ABC都有可能。
出题的人或者给出程序片断,或者问4个答案哪个不对。

解决方案二:

很明显,出题的是一个废柴,他自己不会编程,估计也就是背下了一个书上的例子代码,就以为全天下快速排序都必须按照这个写。这种人你遇见呵呵一下就行了。

解决方案三:

没错,如果你看过快速排序的算法,就清楚了比5小的会放到他前面

解决方案四:

其实就是先以5为基准,把大于5和小于5的数分开

解决方案五:

老曹说的对,只有两边分开,都是对的

解决方案六:

考试题目就是这样,很坑

解决方案七:

确实ABC 都是满足 比5大的和小的分别在5的两边,
可能就是因为 5 6 8 的顺序原因(AB都是586),遇见比5大的没必要改变其顺序,好吧,我也承认这个解释很牵强

解决方案八:

不知道对不对,我按这个方法,好像答案就是C
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

解决方案九:

很明显,上面这些人都是真的没有编过快速排序的算法,如果真的编一个紧凑的快速排序算法的话就会是C的,你们所说的原理差不多是对的,但是真的编程的时候取第一个
为主元做一趟循环之后就是C的结果,不信可以去编,如果你能编出AB的情况要么就是代码不够紧凑,要么就是你的这个算法可以发表论文了!顺便说下代码不够紧凑的意思
就是:时间复杂度前面的系数会比较大!

时间: 2024-10-25 15:05:26

习题-数据结构快速排序问题的相关文章

关于java 快速排序问题 这个输出报错 我认为 while 有问题 求大神指导

问题描述 关于java 快速排序问题 这个输出报错 我认为 while 有问题 求大神指导 package QuickSort; import java.util.ArrayList; public class QuickSort { public static void main(String[] args) { ArrayList<Integer> lists = new ArrayList<Integer>(); lists.add(5); lists.add(2); lis

c代码--快速排序问题

void quicksort(sqlist l,int low,int high) {int i,j; if(low<high) {i=low;j=high;l.r[0]=l.r[i]; do { while(i<j&&l.r[j].key>l.r[0].key) --j; if(i<j) {l.r[i]=l.r[j];++i;} while(i<j&&l.r[i].key<=l.r[0].key) ++i; if(i<j){ l.

本人菜鸟一个,在学习严蔚敏版本数据结构的习题时发现一个问题,求大神帮助

问题描述 本人菜鸟一个,在学习严蔚敏版本数据结构的习题时发现一个问题,求大神帮助 大家看标红的部分,为什么不直接写成while(p->next) {p=p->next; i++;} ,是不是为了提高效率? 解决方案 while(p->next) {p=p->next; i++;} 你这种写法,如果P是null呢,p->next就报错了.p是否存在是必须判断的,其他怎么写是另一回事了. 解决方案二: 不可以写成那样,判断p=p->next时,while(p)是判断是否到链

《数据结构与算法 C语言版》—— 3.8习题

前言 "数据结构"是计算机程序设计的重要理论技术基础,是计算机学科的核心课程,也是计算机专业考研的必考课程,同时已成为其他理工科专业的热门课程.学好该课程,不仅对学习后续算法设计.数值分析.操作系统.编译原理等课程有很大帮助,而且在实际中有广泛的用途. 数据结构主要研究数据的各种组织形式以及建立在这些结构之上的各种运算的实现.它不仅为用计算机语言进行程序设计提供了方法性的理论指导,还在一个更高的层次上总结了程序设计的常用方法和常用技巧. "数据结构"课程的特点是概念

编程-关于通讯录,数据结构的一道习题

问题描述 关于通讯录,数据结构的一道习题 编程实现如下功能: (1)构建一个通讯录类型,包含<姓名>.<电话>数据项. (2)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致. (3)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值. (4)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值. (5)在顺序表中查找值为e的数据元素,如果查找成功,则显示"查找成功"和该

Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)_java

/** * 快速计算二进制数中1的个数(Fast Bit Counting) * 该算法的思想如下: * 每次将该数与该数减一后的数值相与,从而将最右边的一位1消掉 * 直到该数为0 * 中间循环的次数即为其中1的个数 * 例如给定"10100",减一后为"10011",相与为"10000",这样就消掉最右边的1 * Sparse Ones and Dense Ones were first described by Peter Wegner i

数据结构 习题答案

问题描述 数据结构 习题答案 若一个线性表L采用顺序存储结构存储,其中所有元素为整数,设计一个算法,将所有小于0的元素面前,要求算法的时间复杂度为O(n),空间复杂度为O(l) 解决方案 #include <stdio.h> void swp(int& a, int& b) { int c = a; a = b; b = c; } int main() { int z = 0, i = 0; int data[] = {2,-1,0,5,-3,8,-2,-9,0,8}; for

《数据结构与算法 C语言版》—— 1.9习题

1.9习题 1.解释下列术语:数据.数据元素.数据对象.数据结构. 2.数据类型和抽象数据类型是如何定义的?两者有何异同?抽象数据类型的主要特点是什么?使用抽象数据类型的主要优点是什么? 3.数据元素之间的关系在计算机中有几种表示方法?各有什么特点? 4.简述数据结构的三个层次.五个要素. 5.举一个数据结构的例子,说明其逻辑结构.存储结构及其运算三个方面的内容,并说明数据的逻辑结构.存储结构及其运算之间的关系. 6.设n为整数,试给出下列各程序段中标号为@的语句的频度. (1) i=1; wh

数据结构-C#有什么方法能把数据快速插入哈希表,

问题描述 C#有什么方法能把数据快速插入哈希表, 现在的速度是 4M大小 时间大概是50ms,还有没有能更快的? 解决方案 4M 50ms相当于每秒80M,对于GHz级别的处理器,每次插入也就用了十几个时钟周期,这个速度不低了.如果你有多个处理器,试试看并行算法. 解决方案二: 看一下相关的c#资料可以自己先写一个类,在类中引用哈希表,再在你指定的位置插入.