类别 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 | ||
最好情况 | 最坏情况 | 平均情况 | 辅助存储 | |||
插入排序 | 直接插入排序 | O(n) | O(n²) | O(n²) | O(1) | 稳定 |
希尔排序 | O(n) | O(n²) | ~O(n^1.3) | O(1) | 不稳定 | |
交换排序 | 冒泡排序 | O(n) | O(n²) | O(n²) | O(1) | 稳定 |
快速排序 | O(nlogn) | O(n²) | O(n) | O(nlogn) | 不稳定 | |
选则排序 | 直接选则排序 | O(n²) | O(n²) | O(n²) | O(1) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n²) | 不稳定 | |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 | |
基数排序 k:待排元素的维数,m为基数的个数 | O(n+m) | O(k*(n+m)) | O(k*(n+m)) | O(n+m) | 稳定 |
冒泡排序
public class Test { //冒泡排序
public static void BubbleSort(int[] arr) {
int temp;//定义一个临时变量
for(int i=0;i<arr.length-1;i++){//冒泡趟数
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]<arr[j]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int k=0;k<arr.length;k++) {
System.out.print(arr[k]+" ");//2 3 5 7 13 23 44
}
}
public static void BubbleSort(int[] arr) {
int a[]={13,44,3,23,5,7,2};
BubbleSort(a);
}
}
选择排序
public class Test {
public static void xuanzepaixu(int arr[]) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
for (int k = 0; k < arr.length; k++) {
System.out.print(arr[k] + ",");
}
System.out.println();
//2,44,13,23,5,7,3,
//2,3,44,23,13,7,5,
//2,3,5,44,23,13,7,
//2,3,5,7,44,23,13,
//2,3,5,7,13,44,23,
//2,3,5,7,13,23,44,
//2,3,5,7,13,23,44,
}
}
public static void main(String[] args) {
int a[] = { 13, 44, 3, 23, 5, 7, 2 };
xuanzepaixu(a);
}
}
1.对有n个元素的顺序表进行直接插入排序,在最坏情况下需比较______ 次关键字。
A、n-1
B、n+1
C、n/2
D、n(n-1)/2
答案:D
2.对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是______。
A、排序的总趟数
B、元素的移动次数
C、使用辅助空间的数量
D、元素之间的比较次数
答案:D
3.以下排序方法中,不稳定的排序方法是______。
A、冒泡排序
B、直接插入排序
C、希尔排序
D、二路归并排序
答案:C
4.对整数序列(8,9,10,4,5,6,20,1,2)进行递增排序,采用每趟冒出一个最小元素的冒泡排序算法,需要进行的趟数是______。
A、3
B、4
C、6
D、8
答案:C
5.对一组数据(2,12,16,88,5,10)进行排序,若前三趟的结果如下:
第一趟:2,12,16,5,10,88
第二趟:2,12,5,10,16,88
第三趟:2,5,10,12,16,88
则采用的排序方法可能是______。
A、冒泡排序
B、希尔排序
C、二路归并排序
D、基数排序
答案:A
6.对8个元素的顺序表进行快速排序,在最好情况下,元素之间的比较次数为______ 次。
A、7
B、8
C、12
D、13
答案:D
【解析】当元素随机排序时,且每次选取参考元素均为其中值时,快速排序呈现最好的状况。在8个元素的情况下,设这8个元素为O-7,则比较7次的元素为4,比较3次的元素为2,比较2次的元素为6,比较1次的元素为1,其余各元素在以其他元素为基准进行比较时位置已经确定,因此需要进行比较的次数为:7+3+2+1=13,答案为D项。
7.对关键字序列(28,16,32,12,60,2,5,72)进行快速排序,第一趟从小到大一次划分结果为______。
A、(2,5,12,16) 26 (60 32 72)
B、(5,16,2,12) 28 (60,32,72)
C、(2,16,12,5) 28 (60,32,72)
D、(5,16,2,12) 28 (32,60,72)
答案:B
8.以下关于快速排序的叙述中正确的是______。
A、快速排序在所有排序方法中为最快,而且所需辅助空间也最少
B、在快速排序中,不可以用队列替代栈
C、快速排序的空间复杂度为O(n)
D、快速排序在待排序的数据随机分布时效率最高
答案:D
9.设有n(n为大于10000的整数)个无序元素,希望用最快速度从中选择前k(1≤k≤n)个关键字最小的元素,在以下排序方法中应选择______。
A、快速排序
B、希尔排序
C、二路归并排序
D、直接插入排序
答案:A
10.在一般情况下,以下排序算法中元素移动次数最少的______。
A、直接插入排序
B、冒泡排序
C、简单选择排序
D、都一样
答案:C
11.2n个不同的元素选择其中最小元素所需关键字比较次数最少是______次。
A、n
B、2n
C、2n-1
D、n-1
答案:C
12.以下序列不是堆的是______。
A、(100,85,98,77,80,60,82,40,20,10,66)
B、(100,98,85,82,80,77,66,60,40,20,10)
C、(10,20,40,60,66,77,80,82,85,98,100)
D、(100,85,40,77,80,60,66,98,82,10,20)
答案:D
13.有一个整数序列为(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为______。
A、(-1,4,8,9,20,7,15,7)
B、(-1,7,15,7,4,8,20,9)
C、(-1,4,7,8,20,15,7,9)
D、以上都不对
答案:C
14.在二路归并排序中归并的趟数是______。
A、n
B、log2n
C、log2n+1
D、n2
答案:B
15.以下排序方法中,______ 不需要进行关键字的比较。
A、快速排序
B、二路归并排序
C、基数排序
D、堆排序
答案:C
16.以下4个线性表中,最适合采用基数排序的是______。
A、10000个实数
B、1000个由字母、数字和其他字符组成的字符串
C、1000个int类型的整数
D、10000个100以内的正整数
答案:D
17.对给定的关键字序列(110,119,007,911,114,120,122)进行基数排序,则第2趟分配 收集后得到的关键字序列是______。
A、007,110,119,114,911,120,122
B、007,110,119,114,911,122,120
C、007,110,911,114,119,120,122
D、110,120,911,122,114,007,119
答案:C
18.以下排序方法中,______ ,在初始序列已基本有序的情况下,排序效率最高。
A、冒泡排序
B、直接插入排序
C、快速排序
D、堆排序
答案:B
19.数据序列(8,9,10,4,5,6,20,1,2)只能是______ 算法的两趟排序后的结果。
A、简单选择排序
B、冒泡排序
C、直接插入排序
D、堆排序
答案:C
20.以下排序算法中,______ 在最后一趟排序结束之前可能所有元素都没有放到其最终位置上。
A、简单选择排序
B、希尔排序
C、堆排序
D、冒泡排序
答案:B
21.下列排序方法中,______ 在一趟结束后不一定能选出一个元素放在其最终位置上。
A、简单选择排序
B、冒泡排序
C、二路归并排序
D、堆排序
答案:C
22.整数序列(3,2,4,1,5,6,8,7)是第一趟递增排序后的结果,则采用的排序方法可能是______。
A、快速排序
B、冒泡排序
C、堆排序
D、简单选择排序
答案:A
23.整数序列(5,4,15,10,3,2,9,6,1)是某排序方法第一趟后的结果,该排序算法可能是______。
A、冒泡排序
B、二路归并排序
C、堆排序
D、简单选择排序
答案:B
24.以下关于外排序的叙述中正确的是______。
A、外排序把外存文件调入内存,再利用内排序进行排序,所以外排序所花时间完全由采用的内排序决定
B、外排序分为产生初始归并段和多路归并两个阶段
C、外排序并不涉及文件的读写操作
D、外排序完全可以由内排序来替代
答案:B
25.将一个由置换-选择排序方法得到的输出文件F1作为输入文件再次进行置换-选择排序,得到输出文件F2,问F1和F2的差异是______。
A、F2归并段个数减少
B、F2中归并段的最大长度增大
C、F2和F1无差异
D、归并段个数及各归并段长度均不变,但F2中可能存在与F1不同的归并段
答案:C