首页 > 试题广场 >

一组记录的排序码为(46,79,56,38,40,84),一

[单选题]

一组记录的排序码为(467956384084),一趟排序的结果为(403846567984),则采用的是()排序算法。

  • 起泡
  • 直接插入
  • 快速
  • 2-路归并
推荐
选C。
A选项起泡算法:相邻元素两两比较,一个元素大于右侧相邻元素交换位置,否则位置不变。
  • 一趟排序为:46,56,38,40,79,84
B选项直接插入:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。
  • 一趟排序为:38,40,46,79,56,84
C选项快速:挑选一个基准元素,大于基准元素的放在其右边,小于基准元素的放在其左边,从而拆分为两部分,以此类推直到不可拆分为止。
以源数据第一个元素46为基准,采用双边循环法设置left和right两个指针指向数组最左和最右两端,从右指针开始,如果大于或等于基准元素则指针向左移动,如果小于基准元素则停止。转向left指针向右移动如果小于或等于基准元素则继续向右移动,如果大于基准元素则停止。交换两指针元素后,右指针继续上述操作比较,直到最后把基准元素和两指针重复元素交换位置。第一趟排序结束得出如下排序,所以C正确。
  • 一趟排序为:403846567984
D选项2-路归并将一个数组分成两个数组,分别对两个数组进行排序,循环第一步,直到划分出来的“小数组”只包含一个元素,只有一个元素的数组默认为已经排好序
  • 一趟排序为:46,56,79合并;38,40,84合并


编辑于 2019-05-31 14:13:44 回复(2)
发表于 2019-05-30 20:43:10 回复(0)
注意Shell和Quick的区别
发表于 2021-04-23 09:57:44 回复(0)
首先观察数据,可以看到好多数据的位置发生了变化,而且变化起来很乱。
肯定不是 选择排序;直接插入也不是,冒泡也不是,然后简单看一下快速排序,符合条件。
发表于 2020-05-27 16:13:10 回复(0)
冒泡一趟下是46,56,48,30,79,84
发表于 2019-08-07 16:02:15 回复(1)
链接:https://www.nowcoder.com/questionTerminal/66bfd80dcc8d4a5191a4ae7c38b5433b
来源:牛客网

一组记录的排序码为(46,79,56,38,40,84),

这就是对应的代码;
int t = 0;//定义存储数值变量
int[] a = (46,79,56,38,40,84);//存储数组
//排序算法。(插入排序)
for(int i  = 0;i<a.length;i++){
for(int j = 1;j<a.length;j++){
if(a[i]<a[j]){
t = a[i];
a[i] = a[j];
[a[j]=t;
}
}
发表于 2019-05-31 08:08:15 回复(0)
c
发表于 2019-05-30 17:13:41 回复(0)
C,快速排序
发表于 2019-05-30 17:11:10 回复(0)