C#几种排序方法

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;



public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            Sort();

            int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2,5,6,8 };

            XESort(arr,7);

        }

    }

    //插入排序:从第二个数据开始,遍历所有元素,作为基准点;然后遍历这个基准点之前的所有元素和这个数据进行比较,

    //然后判断,数据大小,大的后移,利用j--,一直找到合适的位置,然后arr[j]=temp;赋值即可

    private void Sort()

    {

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

        int i, j, temp;

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

        {

            temp = arr[i];

            for (j = i; j > 0; j--)

            {

                if (temp < arr[j - 1])

                {

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

                }

                else

                {

                    break;

                }

            }

            arr[j] = temp;

        }

    }

    //希尔排序

    private void XESort(int[] a, int n)

    {

        //  int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2,5,6,8 };

        int i, j, h,temp;

        for (h = n / 2; h > 0; h = h / 2)//循环所得 增量值

        {

            for (i = h; i < n; i++)//循环的到点值

            {

                temp = a[i];//把点值付给temp

                for (j = i - h; j >= 0 && temp < a[j]; j = j - h)

                {

                    a[j + h] = a[j];

                }

                a[j + h] = temp;//很多情况下这个j为负值-1

            }

        }

    }

    //冒泡排序

    private void MPSort()

    {

        int[] arr = new int[] { 6, 3, 8, 4, 6, 3, 2, 5, 6, 8 };

        int middleVal;

        bool flag = false; //交换标志

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

        {

            flag = false;

            for (int j = arr.Length - 1; j >= i; j--)

            {

                if (arr[i] < arr[j - 1])

                {

                    middleVal = arr[j];

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

                    arr[j - 1] = middleVal;

                    flag = true;

                }

            }

            if (!flag) //如果没有发生交换,终止算法

                return;

        }

    }

    //快速排序

    private static void QuickSort(int lowest, int highest)

    {

        int[] array = new int[] { 49, 38, 65, 97, 76, 13, 27, 49 };

        if (array == null || lowest < 0 || lowest >= highest || highest >= array.Length)

        {

            return;

        }

        int low = lowest;

        int high = highest;

        int key = low++;

        for (; low <= high; )

        {

            if (key < high)

            {

                if (array[key] > array[high])

                {

                    array[high] = array[key] + (array[key] = array[high]) * 0;

                    key = high;

                }

                high--;

            }

            if (key > low)

            {

                if (array[key] < array[low])

                {

                    array[low] = array[key] + (array[key] = array[low]) * 0;

                    key = low;

                }

                low++;

            }

        }

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

        {

            Console.Write(array[i] + ", ");

        }

        Console.WriteLine();

        QuickSort(lowest, key - 1);

        QuickSort(key + 1, highest);

    }

    //选择排序

    //从第一个开始 每一个他后边的所有进行比较,如果前边的大于后边的那么两者交换值,最小的值在前边,最大的值在最后 ------- 命名;向后扫描法

    protected void Button2_Click(object sender, EventArgs e)

    {

        int[] arr = new int[] { 49, 38, 65, 97, 76, 13, 27, 49 };

        int min, tmp;

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

        {

            min = i;

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

            {

                string a = arr[min].ToString();

                string b = arr[j].ToString();

                if (arr[min] > arr[j])

                {

                    min = j;//每一个for循环一遍的到一个每次中的最小的值的索引

                }

            }

            tmp = arr[i];

            arr[i] = arr[min];

            arr[min] = tmp;

        }

        foreach (var a in arr)

        {

            Response.Write(a + ",");

        }

    }

}

  

你可能感兴趣的:(C#)