1.冒泡排序
口诀:
外层循环 n-1; |
内层循环 n-1-i; |
两两比较做互换; |
以下代码在控制台操作,输入数字以‘逗号’隔开
Console.WriteLine("请输入一组数字:");
string str = Console.ReadLine();
string[] num = str.Split(','); // 获取到每个数
int[] numlist=new int[num.Length];
for (int i = 0; i < num.Length; i++)
{
numlist[i] = int.Parse(num[i]); // 将每个数存储到numlist数组中
}
for (int i = 0; i < numlist.Length-1; i++)
{
for (int j = 0; j < numlist.Length-1-i; j++)
{
if (numlist[j]<numlist[j+1]) //此数小于后一个数,两个数交换,从大到小排列
{
int temp = numlist[j];
numlist[j] = numlist[j + 1];
numlist[j + 1] = temp;
}
}
}
Console.WriteLine("排序结果为:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(numlist[i]+",");
}
Console.ReadLine();
程序执行结果:
2.插入排序
int[] numlist = { 3, 6, 88, 35, 1, 45, 7 };
Console.WriteLine("排列前一组数字:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" " + numlist[i]);
}
for (int i = 1; i < numlist.Length; i++)
{
int temp = numlist[i];
for (int j = i-1; j >=0; j--) // 遍历排在此数前面的数
{
if (numlist[j]>temp) // 如果前面的一个数大于此数,交换位置,知道前面数比此数小为止
{
numlist[j + 1] = numlist[j];
numlist[j] = temp;
}
else
{
break;
}
}
}
Console.WriteLine("\r\n"+"排序结果为:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
程序执行结果:
3.选择排序
int[] numlist = { 33, 2, 6, 89, 11 };
Console.WriteLine("排列前一组数字:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
//总共要进行n-1轮比较
for (int i = 0; i < numlist.Length-1; i++)
{
int min =i;
//每轮需要比较的次数n-i
for (int j = i+1; j < numlist.Length; j++)
{
if (numlist[min]>numlist[j]) // 当此数大于后一个数
{
// 记录目前能找到的最小值元素的下标
min = j;
}
}
int temp = numlist[i];
numlist[i] = numlist[min];
numlist[min] = temp;
}
Console.WriteLine("\r\n"+"排序后结果为:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
程序执行结果:
4.快速排序
5.希尔排序
插入排序的升级
static void Main(string[] args)
{
int[] numlist = { 33, 6, 89, 34, 63, 2, 7 };
Console.WriteLine("排序前数组:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
// 将每组间隔为h的分组进行排序,刚开始h=数组长度的一半
for (int h = numlist.Length/2; h >0; h/=2)
{
//对每组进行插入排序
for (int i = h; i < numlist.Length; i++)
{
// 将numlist[i]插入到所在分组的正确位置上
insertI(numlist, h, i);
}
}
Console.WriteLine("\r\n排序后结果:");
for (int i = 0; i < numlist.Length; i++)
{
Console.Write(" "+numlist[i]);
}
Console.ReadLine();
}
// 插入排序的方法
private static void insertI(int[] arr,int h, int i)
{
int temp = arr[i];
int k;
for ( k= i-h; k>=0 && temp<arr[k]; k-=h)
{
arr[k + h] = arr[k];
}
arr[k + h] = temp;
}
程序执行结果:
借鉴于: https://www.cnblogs.com/itsharehome/p/11058010.html
6.堆排序
7.归并排序
8.计数排序
9.桶排序
10.基数排序