您的位置:首页 > 编程语言 > C#

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

2015-03-26 09:50 323 查看
没事总结了一下平时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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: