排序
冒泡排序
-
两两交换,依次把最大值移到最后面
#include <iostream> #include <cstring> #include <vector> #include <map> #include <cmath> #include <set> using namespace std; void busort(vector<int>& arr) { for (int i = 0; i < arr.size(); i++) { for (int j = 1; j < arr.size() - i - 1; j++) { if (arr[j - 1] > arr[j]) { int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } } int main() { vector<int> arr = {1,4,2,3,7,5,9,6,8}; busort(arr); for (int i = 0; i < arr.size(); i++) cout << arr[i] << endl; return 0; }
把数组排成最小的数
题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
测试用例:
输入: [10,2]
输出: "102"
思路:其实就是对数组中的每个数的每一位进行排序,取最小的值
代码
class Solution {
public:
string minNumber(vector<int>& nums) {
if (nums.size() == 0)
return "";
string res;
//对数组进行排序,如果两个数交换顺序之后组成的字符串更小,就交换两个数
for (int k = 0; k < nums.size(); k++)
{
for (int x = 1; x < nums.size(); x++)
{
if (to_string(nums[x])+to_string(nums[x-1])< to_string(nums[x-1]) + to_string(nums[x]))
{
int temp = nums[x];
nums[x] = nums[x - 1];
nums[x - 1] = temp;
}
}
}
//对每一位数把整形转化为字符串
for (int k = 0; k < nums.size(); k++)
{
res = res + to_string(nums[k]);
}
return res;
}
};
移动零
-
题目:给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。 -
测试样例
-
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
-
代码
class Solution { public: void moveZeroes(vector<int>& nums) { //采用冒泡排序思想,遇到零就把它移到末尾 for(int i=0;i<nums.size();i++) { for(int j=1;j<nums.size()-i;j++) { if(nums[j-1]==0) { int temp=nums[j]; nums[j]=nums[j-1]; nums[j-1]=temp; } } } } };
选择排序
双重循环遍历数组,每经过一轮比较