1. 程式人生 > >C#選擇排序和氣泡排序

C#選擇排序和氣泡排序

在上一篇文章中《演算法排序》中簡單介紹了選擇排序和氣泡排序,這次讓咱們緊接著上次的節奏繼續來學習這兩種排序。都說是萬事開頭難,其實有了充分的準備一點都不難了,在本文中,小編將要介紹演算法排序的圖形過程與程式碼。

選擇排序

圖形描述

                                      

過程描述

  1. 假設第i個數是最大;
  2. i個數與從i+1n個數之間一次比較;
  3. 內迴圈中交換n-i次之後得到一輪結果;

核心程式碼

For i=1 to n-1   '外迴圈

For j=i+1 to n  '內迴圈

If a(i)>a(j) then

a(i)=c

a(j)=a(i)

c=a(j)


氣泡排序

圖形描述


過程

  1. 大數上浮,小數沉底;
  2. 兩兩交換;

核心程式碼

For i=1 ton-1

For j=1 to n-i

If a(j)>a(j+1) then

a(i)=c

a(j)=a(i)

c=a(j)


程式碼展示


namespace 排序
{
    class 選擇排序
    {
        static void Main(string[] args)

        {
            InsertionSort();
        }
        ///<summary>
        ///選擇序法
        ///</summary>
        private static void InsertionSort()
        {
            Console.WriteLine("選擇排序法");
            int temp = 0;
            int[] arr = { 7, 1, 6, 3, 8, 2, 9, 4, 0, 5 };

            Console.WriteLine("排序前的陣列:");
            foreach (int item in arr)
            {
                Console.Write(item + ",");
            }

            Console.WriteLine();

            var length = arr.Length;

            for (int i = 0; i < length - 1; i++)
            {
                for (int j = i + 1; j < length; j++)
                {
                    if (arr[i] < arr[j])
                    {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
                //每次排序後陣列
                PrintResult(arr);
            }
            Console.ReadKey();
        }
        ///<summary>
        ///列印結果
        ///</summary>
        ///<paramname="arr"></param>
        private static void PrintResult(IEnumerable<int> arr)
        {
            foreach (int item in arr)
            {
                Console.Write(item + ",");
            }
            Console.WriteLine();
        }
    }
}



namespace 排序
{
    class 冒泡
    {
        static void Main(string[] args)
        {
            InsertionSort();
        }
        ///<summary>
        ///冒泡序法
        ///</summary>
        private static void InsertionSort()
        {
            Console.WriteLine("氣泡排序法");
            int temp = 0;
            int[] arr = { 7, 1, 6, 3, 8, 2, 9, 4, 0, 5 };

            Console.WriteLine("排序前的陣列:");
            foreach (int item in arr)
            {
                Console.Write(item + ",");
            }

            Console.WriteLine();

            var length = arr.Length;

            for (int i = length ; i >0; i--)
            {
                for (int j = 0; j < i-1; j++)
                {
                    if (arr[j] < arr[j+1])
                    {
                        temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j ] = temp;
                    }
                }
                //每次排序後陣列
                PrintResult(arr);
            }
            Console.ReadKey();
        }
        ///<summary>
        ///列印結果
        ///</summary>
        ///<paramname="arr"></param>
        private static void PrintResult(IEnumerable<int> arr)
        {
            foreach (int item in arr)
            {
                Console.Write(item + ",");
            }
            Console.WriteLine();
        }
    }
}

排序與總結

在學習排序的過程中,從老師教給我們知識只是老師的,並不是學生自己的,只有自己努力去實踐,才可以將知識掌握甚至於融會貫通。在本文中,小編針對演算法中比較簡短的兩種排序進行了講解,如果有什麼錯誤的地方,還請多多指教。