zoukankan      html  css  js  c++  java
  • 冒泡排序、选择排序和插入排序

    一、冒泡排序

    依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,直至最终完成排序。

    冒泡排序是稳定的。算法时间复杂度是O(n ^2)。

    程序实现示例

    将数组从小到大排列

    public void BubbleSort(int[] array)

    {

      int length = array.Length;

      for (int i = 0; i <= length - 1; i++)

      {

      for (int j = length - 1; j > i; j--)

      {

      if (array[j] < array[j - 1] )

      {

      int temp = array[j];

      array[j] = array[j - 1];

      array[j - 1] = temp;

         }

         }

         }

    }

    二、    选择排序

    每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

    选择排序是不稳定的。算法复杂度是O(n ^2 )。

    程序实现示例

    将数组从小到大排列

    public void ChoiceSort (int [] array)

     {

         int min;

         for(int i=0;i< array.Length-1;i++)

         {

             min=i;

             for(int j=i+1;j< array.Length;j++)

            {

                if(list[j]<list[min])

                    min=j;

            }

            int t=list[min];

            list[min]=list[i];

            list[i]=t;

        }

    }

    三、    插入排序

    每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

    直接插入排序是稳定的。算法时间复杂度是O(n ^2)

    程序实现示例

    将数组从小到大排列
     public void InsertSort (int [] array)
     {
         for(int i=1;i< array.Length;i++)
         {
             int temp = array [i];//从无序表中取出的数,放在temp里面

         // j>0&&temp< array [j-1]为每一轮排序停止的条件

              for(int j=i;j>0&&temp< array [j-1];j--)

              {

                     array[j]= array[j-1];                

              }

             array[j]=temp;
       }
    }

    ps:

     1) 稳定的:如果存在多个具有相同排序码的记录,经过排序后,这些记录的相对次序仍然保持不变,则这种排序算法称为稳定的。
        插入排序、冒泡排序、归并排序、分配排序(桶式、基数)都是稳定的排序算法。
     2)不稳定的:否则称为不稳定的。
        直接选择排序、堆排序、shell排序、快速排序都是不稳定的排序算法。

  • 相关阅读:
    matlab练习程序(单源最短路径Dijkstra)
    Android开发必须知道SERVICE的10件事
    Android 多种方式正确的加载图像,有效避免oom
    在Android中解决内存溢出 – OutOfMemoryError
    发布Android开源库,看这个文章就够了!
    发掘StateListAnimator的全部潜能
    Android开发中多进程共享数据
    Android使用FFMpeg实现推送视频直播流到服务器
    Android学Jni/Ndk 开发记录(一)
    一张图解释RxJava中的线程控制
  • 原文地址:https://www.cnblogs.com/linzheng/p/1827400.html
Copyright © 2011-2022 走看看