冒泡排序 递归算法

C#之冒泡排序 递归算法

1,冒泡排序

以前在学校的时候看过冒泡排序,看的时候挺明白的,但是自己写的时候就写不出来,在网上搜索了一下,发现网上的冒泡排序算法几乎都不符合冒泡排序的原理,虽然也能实现,但是不正宗。

冒泡排序从字面意思理解:应该是这样的,按照顺序从最下面一个(数组索引最大)上升到第一个:

所以最正宗的代码是这样的:

复制代码
  //冒泡排序
        public void BubbleSort(double[] data)
        {
            for (int i = 0; i < data.Length - 1; i++)
            {
                for (int j = data.Length - 1; j >i; j--)
                {
                    if (data[j] > data[j - 1])
                    {
                        data[j] = data[j] + data[j - 1];
                        data[j - 1] = data[j] - data[j - 1];
                        data[j] = data[j] - data[j - 1];
                    }
                }
            }
        }
复制代码

当然如果你喜欢最下底下的元素对应最小索引,那么代码是这样的:

复制代码
 //冒泡排序
        public void BubbleSort(double[] data)
        {
            for (int i = 0; i < data.Length-1; i++)
            {
                for (int j = 0; j < data.Length-1-i; j++)
                {
                    if(data[j]>data[j+1])
                    {
                        data[j] = data[j] + data[j + 1];
                        data[j + 1] = data[j] - data[j + 1];
                        data[j] = data[j] - data[j + 1];
                    }
                }
            }
        }
复制代码

至于下面这段代码就是网上大量存在的了,我觉得是最差的一种,虽然也能实现排序,但是它逻辑混乱,效率低,执行次数明显比上面两种多

复制代码
public void PopSort(int[] list)
    {
      int i, j, temp;  //先定义一下要用的变量
      for (i = 0; i < list.Length - 1; i++)
      {
        for (j = i + 1; j < list.Length; j++)
        {
          if (list[i] > list[j]) //如果第二个小于第一个数
          {
            //交换两个数的位置,在这里你也可以单独写一个交换方法,在此调用就行了
            temp = list[i]; //把大的数放在一个临时存储位置
            list[i] = list[j]; //然后把小的数赋给前一个,保证每趟排序前面的最小
            list[j] = temp; //然后把临时位置的那个大数赋给后一个
          }
        }
      }
    }
复制代码 2,递归算法(斐波那契)//计算数组{1,1,2,3,5,8.......} 第30位值


 static void Main(string[] args)
       
{
            Console.WriteLine(Process1(
30));
            Console.ReadLine();        
        }

        
public static int Process1(int i)
       
{
if (i == 0return 0;
           
if (i == 1return 1;
           
else
               
return Process1(i - 1+ Process1(i - 2);
        }

你可能感兴趣的:(C#基础)