C#中常用的几种排序算法

来源:互联网 发布:男士控油保湿知乎 编辑:程序博客网 时间:2024/06/05 14:37


没事总结了一下平时C#中比较常见的排序算法,其中有稳定的 也有不稳定的,使用时自行斟酌,下面是具体脚本:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2{    class Program    {        int[] data = { 5, 6, 9, 8, 7, 2, 3, 1, 4, 0 };        int temp;        //选择排序 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置  (不稳定)        void Select()        {            for (int i = 0; i < data.Length - 1; i++)            {                for (int j = i + 1; j < data.Length; j++)                {                    if (data[i] > data[j])                    {                        temp = data[i];                        data[i] = data[j];                        data[j] = temp;                    }                }            }        }        /*  --------------------------------------------------------------------------------------------------------------------------------*/        //冒泡排序   比较相邻两数,每次最后一个元素就是最小或者最大,重复以上操作,出了最后一位,没执行一次 次数-1  (稳定)        void Maopao()        {            for (int i = 0; i < data.Length - 1; i++)            {                for (int j = 0; j < data.Length - 1 - i; j++)                {                    if (data[j] > data[j + 1])                    {                        temp = data[j];                        data[j] = data[j + 1];                        data[j + 1] = temp;                    }                }            }        }        /*  --------------------------------------------------------------------------------------------------------------------------------*/        //插入排序  每次循环都是将该数与之前的所有数作比较,找到合适的位置插入(替换)          (稳定)        void Insert()        {            for (int i = 1; i < data.Length; i++)            {                for (int j = i; j > 0; j--)                {                    if (data[j - 1] > data[j])                    {                        temp = data[j - 1];                        data[j - 1] = data[j];                        data[j] = temp;                    }                }            }        }        /*  --------------------------------------------------------------------------------------------------------------------------------*/        //快速排序   (不稳定)  意在将一组数据分为两组,其中一组的所有数据都大于或者小于另外一组数据。设定第一个数为基数,从右往左找比它小的数,从左往右找比它大的数,注意顺序,一定是先从右往左再从左往右,找到之后将两者交互,等到二者相遇时,将相遇的点设为基数点,将原先设定的基数点的数值赋值给相遇点。        void Quick_Sort(int left, int right)        {            int i, j, temp,t;            if (left > right) return;            //设置基数  设置最左边的数位基数            temp = data[left];            i = left;            j = right;            //执行的条件,当i=j时回归基数            while (i != j)            {                //注意顺序 一定是先右往左找到比基数小的数,再从左往右找到比基数大的数,然后交换两个数的位置                while (data[j] >= temp && i < j) j--;                while (data[i] <= temp && i < j) i++;                if (i < j)                {                    t = data[i];                    data[i] = data[j];                    data[j] = t;                }            }            //i=j 回归基数            data[left] = data[i];            data[i] = temp;            //执行a[i](基数)前面一段的排序            Quick_Sort( left, i - 1);            //执行a[i](基数)后面一段的排序            Quick_Sort( i + 1, right);        }        static void Main(string[] args)        {           Program p = new Program();           p.Quick_Sort(0,p.data.Length-1);            //输出排序后的数           for (int i = 0; i < p.data.Length; i++)             {                 Console.Write(p.data[i] + " ");             }            Console.ReadKey();        }    }}


0 0
原创粉丝点击