排序、复杂度、细节(选择题,判断题)
对于一个已经排好序的序列,直接插入排序的复杂度是O(n),而归并排序的复杂度是O(nlogn)。这时候归并排序就不比直接插入排序速度快了。
归并排序的最好、最坏、平均时间都是O(nlogn),但是简单排序有些情况下是O(n).
仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。
T
二路归并操作的功能是:
A.将两个有序表合并为一个新的有序表
排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为:
A.插入排序
插入排序没有使用额外空间,归并排序使用了额外的辅助空间
标记
下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是:D.仅4、5
1.插入排序;2.选择排序;3.冒泡排序;4.希尔排序;5.堆排序
下列排序算法中,▁▁▁▁▁ 是不稳定的。
A.简单选择排序
B.直接插入排序
C.归并排序
D.基数排序
每次都是从左到右进行,从低位到高位依次比较
二路归并
void merage(int l,int mid,int r) {
int temp[110];
int i=l,j=mid+1,k=l;
while(i!=mid+1&&j!=r+1){//这里终止条件就写左右指针终点的后一个,表示走完了
if(arr[i]>=arr[j]){//因为走到终点时也要执行操作
temp[k++]=arr[j++];
}else{
temp[k++]=arr[i++];
}
}
while(i!=mid+1){
temp[k++]=arr[i++];
}
while(j!=r+1){
temp[k++]=arr[j++];
}
for(int m=l;m<=r;m++){
arr[m]=temp[m];
}
}
在while条件里cin>>n,可以实现
结构体排序,多指标
先依据ch降序,再依据math降序,最后看id的升序
sort(stu+1, stu + n+1, cmp);
排序调用,直接数组名+需要排序部分的下标起始与终点,左闭右开