zoukankan      html  css  js  c++  java
  • 排序算法03-冒泡排序(用C++、C#、lua实现)





    本文为排序算法-冒泡排序的代码实现。
    作者水平比较差,有错误的地方请见谅。

    1、冒泡排序

    冒泡排序属于交换排序。

    排序最好情况:为正序,需进行 1 趟排序,进行 n-1 次比较和0次移动数据。
    排序最坏情况:为逆序,需进行 n-1 趟排序,进行 n^2/2 次比较和 n^2/2*3 次移动数据(每次交换都需要移动3次记录)。

    平均比较次数:n^2/4
    平均移动次数:n^2/4*3

    平均时间复杂度:O(n^2)
    平局空间复杂度:O(1)。因为只在交换位置时使用一个辅助空间做暂存记录。

    2、C#实现

    冒泡排序
    BubbleSort.cs

    	public static class BubbleSort
        {
            public static void Bubble(int[] numbers)
            {
                if (numbers == null || numbers.Length < 2)
                {
                    Console.WriteLine("参数数组有误");
                    return;
                }
    
                for (int i = 0; i < numbers.Length; i++)
                {
                    for (int j = i + 1; j < numbers.Length; j++)
                    {
                        if (numbers[i] > numbers[j])
                        {
                            int temp = numbers[i];
                            numbers[i] = numbers[j];
                            numbers[j] = temp;
                        }
                    }
                }
            }
        }
    

    Program.cs

    	class Program
        {
            static void Main(string[] args)
            {
                int[] numbers = { 555, 3, -5, 20, 11 };
                BubbleSort.Bubble(numbers);
    
                for(int i = 0; i < numbers.Length; i++)
                {
                    Console.Write(numbers[i] + " ");
                }
    			Console.WriteLine();
    
                Console.ReadKey();
            }
        }
    

    3、C++实现

    BubbleSort.cpp

    ///冒泡排序
    class BubbleSort
    {
    public:
        static void Bubble(int numbers[],int length);
    };
    
    void BubbleSort::Bubble(int numbers[],int length)
    {
        if (numbers == NULL || length < 2)
        {
            cout<<"参数数组有误"<<endl;
            return;
        }
    
        for (int i = 0; i < length; i++)
        {
            for (int j = i + 1; j < length; j++)
            {
                if (numbers[i] > numbers[j])
                {
                    int temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
    }
    

    main.cpp

    int main()
    {
        int numbers[] = {555, 3, -5, 20, 11};
        int length = sizeof(numbers)/sizeof(numbers[0]);
    
        BubbleSort::Bubble(numbers,length);
    
        for(int i=0;i<length;i++){
            cout<<numbers[i]<<" ";
        }
        cout<<endl;
    
        return 0;
    }
    

    4、lua实现

    numbers = {555, 3, -5, 20, 11}
    
    function BubbleSort(nums)
    	local length = #nums
    	if (nums == nil or length < 2) then
    		print("参数数组有误")
    		return
    	end
    
    	for i=1,length,1 do
    		for j=i+1,length,1 do
    			if (nums[i] > nums[j]) then
    				local temp = nums[i];
    				nums[i] = nums[j];
    				nums[j] = temp;
    			end
    		end
    	end
    end
    
    BubbleSort(numbers)
    
    for i=1,#numbers,1 do
    	io.write(numbers[i] .. ' ')
    end
    print()
    
    --#nums  获取数组长度
    
    

    5、新知识和疑问

    5.1 C++

    int numbers[] = {555, 3, -5, 20, 11};
    //使用这种方法来获取数组长度
    //用数组总字节数/数组单个元素字节数
    int length = sizeof(numbers)/sizeof(numbers[0]);
    

    C++返回值无法是这种 int[] 类型的数组,要想返回数组需使用指针, int* 。

    C++实现静态函数。

    5.2 lua #号使用

    在使用#获取数组长度时要注意必须为连续的数组。
    在中间存在空洞(nil)的数组,使用#是不可靠的!!!

  • 相关阅读:
    base.View.OpenParameter.CreateFrom打开历史单据的值是default
    创建日期时间大于启动日期时间
    下拉列表不显示空白选项的原因
    复制、下推、选单时计算类的实体服务规则不会执行
    选单返回数据以后会执行的事件方法
    判断单据体是否录入行
    供应商协同平台
    .net core获取运行时文件绝对路径
    gmock函数参数输出 备忘录
    リバース 終章
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11818304.html
Copyright © 2011-2022 走看看