美文网首页
C#中的排序方式

C#中的排序方式

作者: Xbreathes | 来源:发表于2018-11-23 22:12 被阅读0次

    1.冒泡排序

             static void Sort1()
             {
                //待排序数组
                int[] array = { 4, 1, 7, 9, 12, 3, 5 };
                for (int j = 0; j < array.Length - 1; j++)
                {
                    for (int i = 0; i < array.Length - 1-j; i++)
                    {
                        if (array[i] >= array[i + 1])
                        {
                            int temp = 0;
                            temp = array[i];
                            array[i] = array[i + 1];
                            array[i + 1] = temp;
                        }
                       
                    }
                }
                foreach (var item in array)
                {
                    Console.Write(item + " ");
                }
            }
    
    

    2.选择排序

    
     static void Sort2()
            {
                //待排序数组
                int[] group = { 4, 1, 7, 8, 12, 3, 5 };
    
                int temp;
                int pos = 0;
                for (int i = 0; i < group.Length - 1; i++)
                {
                    pos = i;
                    for (int j = i + 1; j < group.Length; j++)
                    {
                        if (group[j] < group[pos])
                        {
                            pos = j;
                        }
                    }//第i个数与最小的数group[pos]交换
                    temp = group[i];
                    group[i] = group[pos];
                    group[pos] = temp;
                }
                foreach (var item in group)
                {
                    Console.Write(item + " ");
                }
            }
    
    

    3.直接插入排序

    
            static void Sort3()
            {
                //待排序数组
                int[] array = { 4, 1, 7, 9, 12, 3, 5 };
                for(int i = 1; i < array.Length; i++)
                {
                    int iValue = array[i];
                    bool isInsert = false;
                    //拿到i位置的元素和他前面的元素进行比较
                    //如果发现比i大的 就让他向后移动
                    for(int j = i-1; j >= 0; j--)
                    {
                        if (array[j] > iValue)
                        {
                            array[j + 1] = array[j];
                        }
                        else
                        {
                            //发现比i小的值就不移动了
                            array[j + 1] = iValue;
                            isInsert = true;
                            break;
                        }
                    }
                    if (isInsert==false)
                    {
                        array[0] = iValue;
                    }
                }
                foreach (var item in array)
                {
                    Console.Write(item + " ");
                }
            }
    
    

    4.最后便是快速排序

       static void Main(string[] args)
        {
            int[] array = new int[] { 4, 23, 41, 57, 89, 12 };
            QuickSort(array, 0, array.Length - 1);
            foreach (var item in array)
            {
                Console.Write(item + " ");
            }
            Console.ReadKey();
         }
    
    
    
    
        /// <summary>
        /// 对数组dataArray中索引从left到right的数做排序
        /// </summary>
        /// <param name="dataArray"></param>要排序的数组
        /// <param name="left"></param>要排序数据的开始索引
        /// <param name="right"></param>要排序数据的结束索引
        static void QuickSort(int[] dataArray,int left,int right)//快速排序
        {
            if (left < right)
            {
                int x = dataArray[left];//基准数,把比他小或者等于它的放在左边,大于他的放在右边
                int i=left;
                int j = right;//用作循环的标志位
                //从后往前比较(从右向左比较)找一个比x小或相等的数字)放在我们的坑里 坑位于i的位置
                while (i<j)//当i==j的时候 说明我们找到了一个中间位置 这个中间位置就是基准数所在的位置
                {
                    while (i < j)
                    {
                        if (dataArray[j] <= x)//找到了一个基准数小于或等于x的数字,应该把他放在x的左边
                        {
                            dataArray[i] = dataArray[j];
                            break;
                        }
                        else
                        {
                            j--;//向左移动下一个数字向左比较
                        }
                    }
                    //从前向后 从左到右找一个比x大的数字,放在我们的坑里,现在的坑位于j的位置
                    while (i < j)
                    {
                        if (dataArray[i] > x)
                        {
                            dataArray[j] = dataArray[i];
                            break;
                        }
                        else
                        {
                            i++;
                        }
                    }
                    
    
                }
                //跳出循环 现在i==j i是中间位置
                dataArray[i] = x;//left-i-right
                QuickSort(dataArray, left, i - 1);
                QuickSort(dataArray, i + 1, right);
            }
                
            
        }
    

    相关文章

      网友评论

          本文标题:C#中的排序方式

          本文链接:https://www.haomeiwen.com/subject/rvbsqqtx.html