C#十大排序算法

1.冒泡排序

在這裏插入圖片描述
   口訣:

外層循環 n-1;
內層循環 n-1-i;
兩兩比較做互換;

以下代碼在控制檯操作,輸入數字以‘逗號’隔開

		Console.WriteLine("請輸入一組數字:");
            string str = Console.ReadLine();
            string[] num = str.Split(','); // 獲取到每個數
            int[] numlist=new int[num.Length];
            for (int i = 0; i < num.Length; i++)
            {
                numlist[i] = int.Parse(num[i]); // 將每個數存儲到numlist數組中
            }
            for (int i = 0; i < numlist.Length-1; i++)
            {
                for (int j = 0; j < numlist.Length-1-i; j++)
                {
                    if (numlist[j]<numlist[j+1])  //此數小於後一個數,兩個數交換,從大到小排列
                    {
                        int temp = numlist[j];
                        numlist[j] = numlist[j + 1];
                        numlist[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine("排序結果爲:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(numlist[i]+",");
            }
		Console.ReadLine();

程序執行結果:
在這裏插入圖片描述

2.插入排序

在這裏插入圖片描述

		int[] numlist = { 3, 6, 88, 35, 1, 45, 7 };
            Console.WriteLine("排列前一組數字:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" " + numlist[i]);
            }
            for (int i = 1; i < numlist.Length; i++)
            {
                int temp = numlist[i];
                for (int j = i-1; j >=0; j--) // 遍歷排在此數前面的數
                {
                    if (numlist[j]>temp) // 如果前面的一個數大於此數,交換位置,知道前面數比此數小爲止
                    {
                        numlist[j + 1] = numlist[j];
                        numlist[j] = temp;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            Console.WriteLine("\r\n"+"排序結果爲:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" "+numlist[i]);
            }
            Console.ReadLine();

程序執行結果:
在這裏插入圖片描述

3.選擇排序

在這裏插入圖片描述

			int[] numlist = { 33, 2, 6, 89, 11 };
            Console.WriteLine("排列前一組數字:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" "+numlist[i]);
            }
            //總共要進行n-1輪比較
            for (int i = 0; i < numlist.Length-1; i++)
            {
                int min =i;
                //每輪需要比較的次數n-i
                for (int j = i+1; j < numlist.Length; j++)
                {
                    if (numlist[min]>numlist[j]) // 當此數大於後一個數
                    {
                        // 記錄目前能找到的最小值元素的下標
                        min = j;
                    }
                }
                int temp = numlist[i];
                numlist[i] = numlist[min];
                numlist[min] = temp;
            }
            Console.WriteLine("\r\n"+"排序後結果爲:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" "+numlist[i]);
            }

            Console.ReadLine();

程序執行結果:
在這裏插入圖片描述

4.快速排序

5.希爾排序

插入排序的升級

	static void Main(string[] args)
        {
            int[] numlist = { 33, 6, 89, 34, 63, 2, 7 };
            Console.WriteLine("排序前數組:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" "+numlist[i]);
            }
            // 將每組間隔爲h的分組進行排序,剛開始h=數組長度的一半
            for (int h = numlist.Length/2; h >0; h/=2)
            {
                //對每組進行插入排序
                for (int i = h; i < numlist.Length; i++)
                {
                    // 將numlist[i]插入到所在分組的正確位置上
                    insertI(numlist, h, i);
                }
            }
            Console.WriteLine("\r\n排序後結果:");
            for (int i = 0; i < numlist.Length; i++)
            {
                Console.Write(" "+numlist[i]);
            }
            Console.ReadLine();
        }
        // 插入排序的方法
        private static void insertI(int[] arr,int h, int i)
        {
            int temp = arr[i];
            int k;
            for ( k= i-h; k>=0 && temp<arr[k]; k-=h)
            {
                arr[k + h] = arr[k];
            }
            arr[k + h] = temp;
        }

程序執行結果:
在這裏插入圖片描述

借鑑於: https://www.cnblogs.com/itsharehome/p/11058010.html

6.堆排序

7.歸併排序

8.計數排序

9.桶排序

10.基數排序

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章