交换排序之冒泡排序
-
冒泡排序(Bubble Sort):重复地走访要排序的元素列,依次比较两个相邻元素,如果顺序错误就把它们交换过来,直到没有相邻的元素需要交换,即排序完成。
-
算法原理冒泡排序演示
- 从元素左侧开始,比较相邻元素。若第一个比第二个大,则交换,否则第二个和第三个比,依次比较执行直到最后一个元素。
- 在上面一趟比较完成后,最后一个数值一定是最大的数,最后一个数不参与第二趟的比较。
- 在第二趟比较完后,倒数第二份数也应该是数组总的倒数第二大的数,所以第三趟的比较中,最后2个数都不参与比较
- 依次类推,每趟比较次数都减1
-
排序图标演示:
4. 复杂度:
平均空间复杂度O(1)
平均时间复杂度O(n^2)
最优时间复杂度O(n)—>已排好顺序的情况
最差时间复杂度O(n^2)-->正好倒叙的情况
5. 稳定的排序算法:
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素 没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,故冒泡排序是一种稳定排序算法。
6. 总结:
交换的轮数=元素个数-1
每一轮交换次数=元素个数-第几轮数
7.代码实现:
class Program
{
static void Main(string[] args)
{
int[] bubbleArray = { 4,1,6,5,3 };
Stopwatch sw = new Stopwatch();
// 开始计时
sw.Start();
// 监控冒泡排序方法的运行时间
BubbleSort(bubbleArray);
// 停止计时
sw.Stop();
Console.WriteLine("冒泡排序方法耗时(毫秒)="+sw.ElapsedMilliseconds);
}
private static void BubbleSort(int[] bubbleArray)
{
for (int i = 0; i < bubbleArray.Length - 1; i++)// 循环轮数
{
for (int j = 0; j < bubbleArray.Length - i - 1; j++)// 每轮交换次数
{
if (bubbleArray[j] > bubbleArray[j + 1])//实现从小到大的排列
{
int temp = bubbleArray[j];
bubbleArray[j] = bubbleArray[j + 1];
bubbleArray[j + 1] = temp;
}
// 排序结果展示
ShowSortResult(bubbleArray);
}
Console.WriteLine("");
}
}
private static void ShowSortResult(int[] bubbleArray)
{
for (int k = 0; k < bubbleArray.Length; k++)
{
Console.Write(bubbleArray[k] + " ");
}
Console.WriteLine();
}
}



浙公网安备 33010602011771号