冒泡排序法,从左到右,相邻两个数字两两比较,如果大于(或小于)则交换位置,边对比边交换位置,直到最后将最大(或最小)的值位置移动到最左(或最右),下一次循环比较,忽略上一次比较结果
int[] arr = new int[] { 11, 32, 5, 74, 9, 65 };
foreach (int num in arr)
{
Console.Write(num + " ");
}
Console.WriteLine();
int j, temp;
for (int i = 0; i < arr.Length - 1; i++)
{
j = i + 1;
id:
if (arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
goto id;
}
else
{
if (j < arr.Length - 1)
{
j++;
goto id;
}
}
}
foreach (int n in arr)
{
Console.Write(n + " ");
}
Console.ReadLine();
直接插入法,将当前位置的值与之前已排序部分的值顺位(或逆位)比较,直到找到某个位置,大于且小于前后值的位置,然后替换位置
int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };
foreach (int n in arr)
{
Console.Write(n + " ");
}
Console.WriteLine();
for (int i = 0; i < arr.Length; i++)
{
int temp = arr[i];
int j = i;
while ((j > 0) && (arr[j - 1] > temp))
{
arr[j] = arr[j - 1];
j--;
}
arr[j] = temp;
}
foreach (int n in arr)
{
Console.Write(n + " ");
}
Console.WriteLine();
选择排序法(与冒泡排序法相比是先找到最小(最大)的值的下标,再替换)
int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };
int min;
for (int i = 0; i < arr.Length - 1; i++)
{
min = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[min])
{
min = j;
}
}
int t = arr[min];
arr[min] = arr[i];
arr[i] = t;
}
foreach (int n in arr)
{
Console.Write(n + " ");
}
Console.WriteLine();