本帖最后由 Cool_Breeze 于 2021-3-23 11:02 编辑
堆排序。。。太难了!
[C#] 纯文本查看 复制代码 using System;
using System.Linq;
class Program
{
static void Main()
{
int[] TestList = {1, 6, 7, 3, 8, 2, 9, 4, 5};
// Bubble(ref TestList);
// Select(ref TestList);
// Insert(ref TestList);
var Result =
from value in TestList
orderby value ascending // ascending 升序 descending 降序
select value;
foreach (var n in Result) Console.Write("{0, 2}", n);
// foreach (var n in TestList) Console.Write("{0, 2}", n);
}
// 冒泡排序
static void Bubble(ref int[] array)
{
int temp = default(int);
for (int i=0; i<array.Length-1; i++) // 每次把最大的一个数移到末尾
{
for (int j=0; j<array.Length-1-i; j++) // 这里还需要减去 i个已经排好序的数(数组右边)
{
if (array[j] > array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
// 选择排序
static void Select(ref int[] array)
{
int temp = 0;
int value = 0;
for (int i=0; i<array.Length; i++)
{
temp = i; // 假设第array[i]位为最大值
for (int j=i+1; j<array.Length; j++)
{
if (array[temp] > array[j])
{
temp = j;
}
}
if (temp != i) // 最大值下标发生改变,需要交换位置(说明i下标不是最大值)
{
value = array[i];
array[i] = array[temp];
array[temp] = value;
}
}
}
// 插入排序
static void Insert(ref int[] array)
{
int temp = 0;
for (int i=1; i<array.Length; i++) // 从数组第二个数开始,往左边插入
{
for (int j=i; j>0; j--) // 变量数组左边的数
{
if (array[j-1] > array [j]) // 依次比较 j, j-1 位置的数
{
temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
else break; // 说明左边已经没有比当前数 array[j] 还要大的数。
}
}
}
} |