C# 四种排序(没有写希尔排序)

 protected void Page_Load(object sender, EventArgs e)

    {



    }

    //它的原理就是相邻的两个两个的比较,如果前面的数比后面的大,那么交换,它这个在比较完一次的时候可以得到最大的一个数,然后接着循环,每次外循环中内循环的次数比原来少一次。

    protected void btn_MaoPao_Click(object sender, EventArgs e)

    {

        int[] arr = new int[] { 56, 12, 34, 45, 22, 34, 56, 23, 45, 67 };

        for (int i = 0; i < arr.Length; i++)

        {

            for (int j = 0; j < arr.Length - i - 1; j++)

            {

                if (arr[j] > arr[j + 1])

                {

                    int temp = arr[j];

                    arr[j] = arr[j + 1];

                    arr[j + 1] = temp;

                }

            }

        }

        for (int k = 0; k < arr.Length; k++)

        {

            Response.Write(arr[k].ToString() + "<br />");

        }

    }

    //选择排序  向后冒泡获取最小值得索引保存最小值MinIndex  ,然后和第i个值进行数据交换

    protected void btn_Select_Click(object sender, EventArgs e)

    {

        int[] arr = new int[] { 56, 12, 34, 45, 22, 34, 56, 23, 45, 67 };

        int minIndex = 0;

        for (int i = 0; i < arr.Length; i++)

        {

            minIndex = i;

            for (int j = i; j < arr.Length; j++)

            {

                if (arr[j] < arr[minIndex])

                {

                    minIndex = j;

                }

            }

            int temp = arr[i];

            arr[i] = arr[minIndex];

            arr[minIndex] = temp;

        }

        for (int k = 0; k < arr.Length; k++)

        {

            Response.Write(arr[k].ToString() + "<br />");

        }

    }

    //插入排序

    //此种算法是一次循环每一个元素,然后在每一个为基值再一次循环小于基值的每一个元素,

    protected void btn_Insert_Click(object sender, EventArgs e)

    {

        int[] arr = new int[] { 56, 12, 34, 45, 22, 34, 56, 23, 45, 67 };

        for (int i = 0; i < arr.Length; i++)

        {

            int temp = arr[i];

            int j = i;

            while (j > 0 && arr[j - 1] > temp)

            {

                arr[j] = arr[j - 1];

                --j;

            }

            arr[j] = temp;

        }

        for (int k = 0; k < arr.Length; k++)

        {

            Response.Write(arr[k].ToString() + "<br />");

        }

    }

    protected void btn_Fast_Click(object sender, EventArgs e)

    {

        int[] arr = new int[] { 56, 12, 34, 45, 22, 34, 56, 23, 45, 67 };

        quick_sort(arr, 0, arr.Length - 1);

        for (int k = 0; k < arr.Length; k++)

        {

            Response.Write(arr[k].ToString() + "<br />");

        }

    }

    //快速排序   //从右向左找第一个小于x的数   //从左向右找第 一个大于x的数

    private void quick_sort(int[] s, int l, int r)

    {

         if (l < r)

        {

            int i = l, j = r, x = s[l];

            while (i < j)

            {

                while (i < j && s[j] >= x)//从右向左找第一个小于x的数

                {

                    j--;

                }

                if (i < j)

                {

                    s[i] = s[j];

                    i++;

                }

                while (i < j && s[i] < x)//从左向右找第 一个大于x的数

                {

                    i++;

                }

                if (i < j)

                {

                    s[j] = s[i];

                    j--;

                }

            }

            s[i] = x;

            quick_sort(s, l, i - 1);

            quick_sort(s, i + 1, r);

        }

 

你可能感兴趣的:(希尔排序)