每日面试题
冒泡排序
两层for循环,第一层来确定比较的轮数,第二层用来负责每一轮中比较相邻的元素。
#include <iostream>
#include <algorithm> // For std::swap, although it's also available in <utility>
using namespace std;
int main()
{
int a[6] = {5, 6, 23, 14, 2, 8};
for (int i = 0; i < 5; i++) // 5轮比较,因为总共有6个元素
{
for (int j = 0; j < 5 - i; j++) // 每一轮只需要比较到未排序部分(j<5-i)的末尾
{
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
}
}
for (int i = 0; i < 6; i++)
{
cout << a[i] << ' ';
}
cout << endl; // 输出换行,使结果更清晰
return 0;
}
选择排序
设置一个临时变量来存储最小值的下标。将第一位与后面的数字进行比较,如果小于第一位就将下标改为小的数的下标,一轮循环结束后将第一位与最小值的交换。以此类推:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[6] = {5, 6, 23, 14, 2, 8};
for (int i = 0; i < 5; i++)
{
int idx = i; // 用来记录最小值的下标
for (int j = i + 1; j < 6; j++)
{
if (a[idx] > a[j])
idx = j;
}
swap(a[i], a[idx]);
}
for (int i = 0; i < 6; i++)
{
cout << a[i] << ' ';
}
cout << endl;
}