C#超基础:排序算法

namespace 排序11_13
{
    class Program
    {
       
        static int temp = 0;
        static void Main(string[] args)
        {
            int[] arr = { 22, 60, 30, 40, 66, 99, 88, 77 ,100,77};
            //InsertSort(arr);
            QuickSort(arr,0,arr.Length-1);
           // BubbleSort(arr);
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i]+"\t");
            }

        }


        /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="arr">要排序的数组</param>
        public static void BubbleSort(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < arr.Length - i - 1; j++)
                {
                    if (arr[j] > arr[j + 1])//相邻两个值进行比较,把较大的数放到最前面
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }

                }
            }
        }


        /// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="arr">要排序的数组</param>
        public static void SelectSort(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                int maxNumber = arr[i];//定义擂主数
                for (int j = i; j < arr.Length; j++)//每过一次循环,前一个数一定比后面的所有的数大,所以循环从i个元素开始。
                {

                    if (arr[i] > arr[j])//擂主数与攻擂数比较,如果获胜胜者与擂主数交换,成为新擂主数
                    {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }

                }

            }
        }


        /// <summary>
        /// 插入排序
        /// </summary>
        /// <param name="arr">要排序的数组</param>
        public static void InsertSort(int[] arr)
        {
            for (int i = 1; i < arr.Length; i++)  //这个数与前一个数比交,所以从第二个数开始循环
            {

                if (arr[i] < arr[i - 1])   //判断大小,决定是否需要交换
                {

                    int temp = arr[i];     //如果需要交换,则将待排序记录放入临时变量中

                    int j = 0;

                    for (j = i - 1; j >= 0 && temp < arr[j]; j--) //在有序序列中从后往前比较,找到待排序记录在有序列中位置(位置空出)
                    {

                        arr[j + 1] = arr[j];    //将有序记录往后移

                    }

                    arr[j + 1] = temp;  //将临时变量中的值放入正确位置,即空出的位置

                }

            }
        }
          /// <summary>
          /// 快速排序
          /// </summary>
          /// <param name="arry">要排序的数组</param>
          /// <param name="left">低位</param>
          /// <param name="right">高位</param>
          public static void QuickSort( int[] arr,int left,int right)
          {
              //左边索引小于右边,则还未排序完成   
             if (left < right)
             {
                 //取中间的元素作为比较基准,小于他的往左边移,大于他的往右边移   
                 int middle = arr[(left + right) / 2];
                 int i = left - 1;
                 int j = right + 1;
                 while (true)
                 {
                     //移动下标,左边的往右移动,右边的向左移动
                     while (arr[++i] < middle && i < right);
                     while (arr[--j] > middle && j > 0);
                     if (i >= j)
                         break;
                     //交换位置
                     int number = arr[i];
                     arr[i] = arr[j];
                     arr[j] = number;
 
                 }
                 QuickSort(arr, left, i - 1); 
                 QuickSort(arr, j + 1, right);
             }
         }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值