冒泡排序

部分内容引用自 知乎:程序员贺同学 整理的C++八股文
↑ 他总结分享的很棒

(1)冒泡排序
算法描述:

  • ⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换它们两个;
  • 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对,这样在最后的元素应
  • 该会是最⼤的数;
  • 针对所有的元素᯿复以上的步骤,除了最后⼀个;
  • ᯿复步骤 1~3,直到排序完成。

⽤⼀个例⼦,带你看下冒泡排序的整个过程。我们要对⼀组数据 4,5,6,3,2,1,从⼩到
到⼤进⾏排序。第⼀次冒泡操作的详细过程就是这样

可以看出,经过⼀次冒泡操作之后,6 这个元素已经存储在正确的位置上。要想完成所有数据
的排序,我们只要进⾏ 6 次这样的冒泡操作就⾏了。

#include <iostream>
#include <vector>

void BubbleSort(std::vector<int> &nums) {
    int n = nums.size();
    if (n <= 1) return;
    bool is_swap;
    for (int i = 1; i < n; ++i) {
        is_swap = false;
        for (int j = 1; j < n - i + 1; ++j) {
            if (nums[j] < nums[j-1]) {
                std::swap(nums[j], nums[j-1]);
                is_swap = true;
            }
        }
        if (!is_swap) break;
    }
}

int main() {
    std::vector<int> nums = {34,66,2,5,95,4,46,27};
    BubbleSort(nums);
    for (int num : nums) {
        std::cout << num << " ";
    }
    // Output: 2 4 5 27 34 46 66 95
    return 0;
}

C# 语言 实现冒泡排序


namespace 冒泡排序
{
    class Program
    {

    // 从小到大排序  
    void BubbleSort( int [] nums)
        {

            for (int i = 0; i < nums.Length; i++)
            {
                bool swapped;

                // 小于nums.Lenght-1-i  是因为 从左向右比较,右边会留下排好的,排好的不用再进行比较了。 
                for (int j = 0; j < nums.Length - 1 - i; j++)
                {
                        swapped = false;   //放里面 每次都初试为false, 可能循环过程中成为了true,改回来
                        if (nums[j] > nums[j + 1])
                        {
                            //C++直接用swap函数就行了,c#要自己写

                            int temp = nums[j];
                            nums[j] = nums[j + 1];
                            nums[j + 1] = temp;
                            //交换了就记一下
                            swapped = true;

                        }

                    if (!swapped)  //如果没有发生交换,那么就是排好了,提前退出
                    {
                        break; 
                    }
                }


            }


        }
        static void Main(string[] args)
        {
            Program program = new Program();

            //int[] nums = { 5, 4, 7, 2, 3 };
            int[] nums = new int[5] { 6, 3, 7, 4 ,9};

            program.BubbleSort(nums);

            //Console.WriteLine(nums);    //笨蛋C# 这个函数不会输出数组里的元素,而是输出数组的类型
            Console.WriteLine(string.Join(", ", nums));  //输出数组中的元素 要不就用for,foreach循环输出元素
            Console.ReadKey();


        }
    }
}


posted @ 2023-03-22 20:11  专心Coding的程侠  阅读(9)  评论(0编辑  收藏  举报