• 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 + ",");
            }
        }
    }
    

      

  • 相关阅读:
    spring data jpa 动态查询(mysql)
    C#面向对象15 多态
    Visual Studio 2012网站如何只生成一个DLL文件
    C#面向对象14 List泛型集合/装箱和拆箱/字典集合(Dictionary)
    C#面向对象13 文件类操作 Path/File/FileStream
    C#面向对象12 集合
    C#面向对象11 里氏转换
    C#面向对象10 继承
    C#面向对象9 字符串
    C# 面向对象8 值类型和引用类型
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/2624996.html
Copyright © 2020-2023  润新知