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.基数排序

在这里插入图片描述
在这里插入图片描述

发布了117 篇原创文章 · 获赞 111 · 访问量 9638

猜你喜欢

转载自blog.csdn.net/dust__/article/details/104127820
今日推荐