手撕 冒泡排序 插入排序 选择排序

//冒泡排序,一句话概括:从前往后遍历,如果a[j-1] > a[j],则交换位置,将最大值放到最后。 
void bubble_sort(vector<int>& nums, int n) {
    if (n <= 1)
        return;
    bool flag = false;
    for (int i = 1;i < n;i++) {
        flag = false; 
        for (int j = 1;j < n - i + 1;j++) {
            if (nums[j] < nums[j - 1]) {
                swap(nums[j], nums[j - 1]);
                flag = true;
            }
        }
        if (!flag)
            break;
    }
}

//插入排序,一句话概括:从前往后遍历,然后从i往前遍历,如果a[i-1] > a[i],则交换位置,将最小值放到最前。
void InsertSort(vector<int>& nums, int n) {
    if (n <= 1)
        return;
    for (int i = 0;i < n;i++) {
        for (int j = i;j > 0 && nums[j] < nums[j - 1];j--) {
            swap(nums[j], nums[j - 1]);
        }
    }
}

//选择排序,前面是已排序数组,后面是未排序数组,每次从未排序数组中找到最小元素,放到已排序的末尾。
void SelectSort(vector<int>& nums, int n) {
    if (n <= 1)
        return;
    int minn;
    for (int i = 0;i < n - 1;i++) {
        minn = i;
        for (int j = i + 1;j < n;j++) {
            if (nums[j] < nums[minn]) {
                minn = j;
            }
        }
        swap(nums[minn], nums[i]);
    }
}

 

posted @ 2023-09-13 16:42  SuperTonyy  阅读(14)  评论(0)    收藏  举报