多种排序类型

直接插入排序:


  public void InsertSort(int[] dataArray)
    {
        for (int i = 1; i < dataArray.Length; i++)
        {
            int iValue = dataArray[i];
            bool isInsert = false;
            //拿到i位置的元素,跟前面所有的元素作比较
            //如果发现比i大的,就让它向后移动
            for (int j = i - 1; j >= 0; j--)
            {
                if (dataArray[j] > iValue)
                {
                    dataArray[j + 1] = dataArray[j];
                }
                else
                {
                    //发现一个比i小的值就不移动了
                    dataArray[j + 1] = iValue;
                    isInsert = true;
                    break;
                }
            }
            if (isInsert == false)
            {
                dataArray[0] = iValue;
            }
        }
    }



简单选择排序:

     //简单选择排序
    public void SelectSort(int[] dataArray)
    {
        for (int i = 0; i < dataArray.Length - 1; i++)
        {
            int min = dataArray[i];
            int minIndex = i; //最小值所在索引
            for (int j = i + 1; j < dataArray.Length; j++)
            {
                if (dataArray[j] < min)
                {
                    min = dataArray[j];
                    minIndex = j;
                }
            }
            if (minIndex != i)  //把最小值交换,放在最前面
            {
                int temp = dataArray[i];
                dataArray[i] = dataArray[minIndex];
                dataArray[minIndex] = temp;
            }
        }
    }



冒泡排序:

    //冒泡排序:
    public void SeqSort(int[] dataArray)
    {
        for (int i = 0; i < dataArray.Length ; i++)
        {
            for (int j = 0; j < dataArray.Length-1; j++)
            {
                if (dataArray[j] > dataArray[j + 1])
                {
                    int temp = dataArray[j];
                    dataArray[j] = dataArray[j + 1];
                    dataArray[j + 1] = temp;
                }
            }
        }
    }

判断排序


 public void DeciseSort(int[] dataArray)
    {
        bool isSwap = true;
        do
        {
            isSwap = false;
            for (int i = 0; i < dataArray.Length - 1; i++)
            {
                if (dataArray[i] > dataArray[i + 1])
                {
                    int temp = dataArray[i];
                    dataArray[i] = dataArray[i + 1];
                    dataArray[i + 1] = temp;
                    isSwap = true;
                }
            }
        } while (isSwap);
        
    }


快速排序:


快速排序的思想:先定义一个值,i=0,j=7,k=a[0];把数组分成两部分,把比k大的放右边,比k小的放左边,先从右往左查找,查找到一个比k小的值,让这个值与k交换,然后在从左往右查找,查找到一个比k大的值,与k交换,记住i,j的索引,然后继续循环查找,直到i=j的时候,在对两边分别排序



        //快速排序
        //对数组dataArray中索引从left到right之间的数做排序
        //dataArray要排序的数组
        //left要排序数据的开始索引
        //right要排序数据的结束索引
    public void QuickSort(int[] dataArray, int left, int right)
    {
       
        if (left < right)//必须判断 左边小于右边的索引
        {
            int x = dataArray[left];   //基准数,把比它小的或等于放左边,然后把它大的放右边
            int i = left;    //
            int j = right;   //用来做循环的标志位
            while (true && i < j)  //当i=j的时候,我们找到了一个中间位置,这个中间位置就是基准数应该所在的位置
            {
                //从右往左查找(从前往后)  找一个比x小(或等于),放在我们坑里,坑位于i的位置
                while (true && i < j)
                {
                    if (dataArray[j] <= x)  //找到了一个比基准数 小于或者等于的数字,应该把它放在x的左边
                    {
                        dataArray[i] = dataArray[j];
                        break;
                    }
                    else
                    {
                        j--; //向左移动 到下一数字,然后作比较
                    }
                }

                //从左往右查找(从前往后) 找一个比x大的数字,放在我们坑里 现在坑位于j的位置
                while (true && i < j)
                {
                    if (dataArray[i] > x)
                    {
                        dataArray[j] = dataArray[i];
                        break;
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            //跳出循环 现在i==j i是中间位置 left-i-right
            dataArray[i] = x;

            QuickSort(dataArray, left, i - 1);
            QuickSort(dataArray, i + 1, right);
        }
       

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值