冒泡排序练习
在冒泡排序中,每一次遍历会将哪一个元素放到正确的位置上?
最大元素
最小元素
中间元素
随机元素
冒泡排序的时间复杂度是:
O(1)
O(n)
O(n²)
O(log n)
冒泡排序的稳定性是什么意思?
它可以处理相等的元素
它可以保证已排序的元素不会被交换
它可以保证元素的顺序不会改变
它可以处理任何类型的数据
在冒泡排序中,若某一次遍历没有进行任何交换操作,则说明什么?
数组已经排好序了
数组中只有一个元素
数组中所有元素相等
数组中没有元素
冒泡排序的空间复杂度是多少?
O(1)
O(n)
O(n²)
O(log n)
下列哪个情况下不应该使用冒泡排序?
当需要排序的数据量很小的时候
当数据量较大,但是数据基本有序时
当需要保证稳定性时
当需要随时插入和删除元素时
冒泡排序的比较次数是多少?
n
n - 1
n²
n!
冒泡排序的交换次数是多少?
n
n - 1
n²
n!
在冒泡排序过程中,如果进行了 n - 1 次遍历,那么最后一个元素一定是什么?
最大的元素
最小的元素
中间的元素
随机的元素
在冒泡排序中,如果某一次遍历没有进行交换,则数组已经排好序?
是的
不是的
下列哪种情况冒泡排序效率最高?
数组已经排好序
数组倒序排列
数组元素随机排列
数组中只有一个元素
冒泡排序属于哪种排序算法?
比较排序算法
非比较排序算法
递归排序算法
插入排序算法
下列哪个算法不是基于比较的排序算法?
冒泡排序
插入排序
快速排序
基数排序
冒泡排序可以优化吗?如果可以的话,如何优化?
可以优化,使用双向冒泡排序
可以优化,使用插入排序优化
可以优化,使用归并排序优化
不可以优化
如何判断一个排序算法是否稳定?
看算法的时间复杂度
看算法的空间复杂度
针对特定的输入数据进行测试
看算法的代码实现
冒泡排序的最坏时间复杂度是多少?
O(1)
O(n)
O(n²)
O(log n)
冒泡排序的平均时间复杂度是多少?
O(1)
O(n)
O(n²)
O(log n)
冒泡排序的最好时间复杂度是多少?
O(1)
O(n)
O(n²)
O(log n)
冒泡排序与选择排序的时间复杂度相同,它们的性能会相同吗?
会
不会
下列哪个算法的空间复杂度最小?
冒泡排序
插入排序
选择排序
希尔排序
冒泡排序算法是稳定的吗?
是的
不是的
下面哪个是理想的冒泡排序的时间复杂度?
O(n)
O(n²)
O(logn)
O(nlogn)
在冒泡排序的第一遍中,最后一个元素经过了几次交换?
0
1
2
不确定
在冒泡排序中,一个元素一共能向前冒泡几次?
0
1
2
不确定
冒泡排序是一种基于什么操作的算法?
比较操作
移动操作
复制操作
偏移操作
在一次遍历中,冒泡排序将最小值或最大值移动到哪一端?
左边
右边
中间
不确定
冒泡排序的特点是什么?
稳定性好,但效率低
效率高,但稳定性差
既稳定性好,效率也高
既稳定性差,效率也低
下列哪个排序算法效率最高?
冒泡排序
快速排序
堆排序
归并排序
冒泡排序属于哪一类排序算法?
插入排序
选择排序
交换排序
交换排序
冒泡排序的优缺点是什么?
优点是易于理解和实现,缺点是效率低
优点是效率高,缺点是稳定性差
优点是稳定性好,缺点是空间复杂度高
优点是空间复杂度低,缺点是易于出错
用户评论
#include <bits/stdc++.h>
using namespace std;
int main(){
string s1,s2,t;
int a[250] = {0},b[250] = {0},r[250] = {0};
char f;
int len,i,j;
getline(cin,s1);
getline(cin,s2);
len = s1.length() > s2.length()?s1.length():s2.length();
if(s1.length() > s2.length() || (s1.length() == s2.length() && s1 >= s2)) {
f = '+';
}else{
f = '-';
t = s1;
s1 = s2;
s2 = t;
}
for(i = 0;i < s1.length();i++){
a[i] = s1[s1.length() - i - 1] - 48;
}
for(i = 0;i < s2.length();i++){
b[i] = s2[s2.length() - i - 1] - 48;
}
for(i = 0;i < len;i++){
if(a[i] < b[i]){
a[i] = a[i] + 10;
a[i + 1]--;
}
r[i] = a[i] - b[i];
}
while(r[len] == 0){
len--;
if(len < 0){
break;
}
}
if(f == '-') cout<<f;
for(i = len;i >= 0;i--) {
cout<<r[i];
}
if(len < 0){
cout<<0<<endl;
}
}
#include<bits/stdc++.h>
using namespace std;
int c[205];
int n, a, b;
int ans[205];
bool vis[205];
queue <int> q;
void bfs(int root){
bool temp=false;
ans[root]=0;
q.push(root);
while(!q.empty()){
int x=q.front();q.pop();
if(x+c[x]<=n&&(!vis[c[x]+x])){
vis[c[x]+x]=true;
ans[x+c[x]]=min(ans[x]+1, ans[x+c[x]]);
if(x+c[x]==b){
temp=true;
break;
}
q.push(x+c[x]);
}
if(x-c[x]>=1&&(!vis[x-c[x]])){
vis[x-c[x]]=true;
ans[x-c[x]]=min(ans[x-c[x]], ans[x]+1);
if(x-c[x]==b){
temp=true;
break;
}
q.push(x-c[x]);
}
}
if(temp)printf("%d\n", ans[b]);
else printf("-1\n");
}
int main (){
memset(ans, 0x3f, sizeof(ans));
scanf ("%d%d%d", &n, &a, &b);
for(int i=1;i<=n;++i)
scanf ("%d", &c[i]);
bfs(a);
return 0;
}
2b
sb
很简单