冒泡排序与选择排序

 冒泡排序(Bubble Sort)

  1. 1,比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

循环的次数是n-1次,外层循环是控制循环的趟数,内层循环控制比较的次数,每循环一趟最大的数就会被交换到数组最后的位置,第二趟找到第二大的数,以此步骤就可以完成排序。

        public static void MaoPao_sort(int[] a)
        {
            for (int i = 0; i < a.Length - 1; i++)
            {
                for (int j = 0; j < a.Length - 1 - i; j++)
                {
                    if (a[j + 1] < a[j])
                    {
                        int temp = a[j + 1];
                        a[j + 1] = a[j];
                        a[j] = temp;
                    }
                }
            }
     }

选择排序(Selection sort)

一、介绍

  1.选择排序法是将序列分为两段,有序前列和无序后列,每次查找无序后列中最大元素,将其插入到有序前列的最末尾处,直至无序后列最后一个元素,最终排序后的序列为降序序列

  2.适用于包括数组和向量在内的序列

  3.选择排序与冒泡排序的区别是选择排序每次遍历时会记住最大元素的位置,只进行一次交换,而冒泡排序每次遍历时会交换两个顺序不合法的元素

二、思想

  1.将序列分为两段,有序前列[0,r)和无序后列[r,n-1]

  2.在无序后列中查找最大元素s=A[m],记住其所在位置

  3.将无序后列中的最大元素与无序前列的首位元素进行交换

  4.循环停止标识:无序后列只剩余最后一个元素

三、代码

       public static void Selection_sort(int[] arr)
        {
            for (int i = 0; i < arr.Length - 1; i++)
            {
                int key = i;
                for (int j = i + 1; j < arr.Length; j++)
                {
                    if (arr[j] < arr[key])
                    {
                        key = j;
                    }
                }
                if (key != i)
                {
                    int temp = arr[key];
                    arr[key] = arr[i];
                    arr[i] = temp;
                }
            }
        }
原文地址:https://www.cnblogs.com/tianranhui/p/10627954.html