假设现有一数组,如下
static void Main(string[] args)
{
int[] myarray = new int[] { 6, 5, 8, 7, 1, 2, 3, 5 };//替换代码
BaseSort(myarray, 0, 7);//替换代码
for(int i = 0; i < myarray.Length; i++)
{
Console.Write(myarray[i] + " ");
}
Console.ReadLine();
}
public static void BaseSort(int[] array, int start, int end)
{
for(int i = start; i < end; i++)
{
if(array[i] > array[i + 1])
{
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
int[] myarray = new int[] { 6, 5, 8, 7, 1, 2, 3, 5 };
BaseSort(myarray, 0, 7);//从下标0到7依次比较并替换,把最大值放到下标7的位置
int[] myarray = new int[] { 5, 6, 7, 1, 2, 3, 5, 8 };
BaseSort(myarray, 0, 6);//从下标0到6依次比较并替换,把最大值放到下标6的位置
int[] myarray = new int[] { 5, 6, 1, 2, 3, 5, 7, 8 };
BaseSort(myarray, 0, 5);//从下标0到5依次比较并替换,把最大值放到下标5的位置
int[] myarray = new int[] { 5, 1, 2, 3, 5, 6, 7, 8 };
BaseSort(myarray, 0, 4);//从下标0到4依次比较并替换,把最大值放到下标4的位置
int[] myarray = new int[] { 1, 2, 3, 5, 5, 6, 7, 8 };
BaseSort(myarray, 0, 3);//从下标0到3依次比较并替换,把最大值放到下标3的位置
int[] myarray = new int[] { 1, 2, 3, 5, 5, 6, 7, 8 };
BaseSort(myarray, 0, 2);//从下标0到2依次比较并替换,把最大值放到下标2的位置
int[] myarray = new int[] { 1, 2, 3, 5, 5, 6, 7, 8 };
BaseSort(myarray, 0, 1);//从下标0到1依次比较并替换,把最大值放到下标1的位置
至此,数组的值按从小到大进行排列。
代码如下
static void Main(string[] args)
{
int[] myarray = new int[] { 6, 5, 8, 7, 1, 2, 3, 5 };
BubbleSort(myarray);
for (int i = 0; i < myarray.Length; i++)
{
Console.Write(myarray[i] + " ");
}
Console.ReadLine();
}
//冒泡排序
public static void BubbleSort(int[] array)
{
for (int i = 0; i < array.Length - 1; i++)
{
for (int j = 0; j < array.Length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
加哨兵的冒泡排序算法:数组中没有交换的时候,说明已经排序完成。
//加哨兵冒泡排序
public static void BubbleSort(int[] array)
{
bool isNoChange = true;
for (int i = 0; i < array.Length - 1; i++, isNoChange = true)
{
for (int j = 0; j < array.Length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isNoChange = false;
}
}
if(isNoChange)
{
break;
}
}
}
最优时间复杂度 | 最差时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|
O(n) | O(n^2) | O(n^2) | O(1) | 是 |
对于优化后的哨兵冒泡排序算法而言
因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。