活动地址:CSDN21天学习挑战赛
目录
一,冒泡排序简介
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
二,算法原理
冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
三,算法分析
1.如果数据是正序的,只需要走一趟即可完成排序。所需的比较次数和记录移动次数均达到最小值,所以,冒泡排序最好的时间复杂度为O(n)。
2.如果数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1 ≤ i ≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大次数,冒泡排序的最坏时间复杂度为:O(n2) 。平均时间复杂度是O(n2)。
四,实操
1,冒泡排序类,给出一个整数数组排序的非静态方法,然后将排序好的数组返回。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SortHelper
{
public class BubbleSortHelper
{
public int[] BubbleSortIntArray(int[] intArray)
{
int[] array = new int[intArray.Count()];
if (intArray.Count() == 0)
{
return array;
}
int length = intArray.Length;
int temp = 0;
for (int i = 0; i < length - 1; i++)//冒泡排序,两两比较,小的在前,大的在后
{
for (int j = 0; j < length - 1 - i; j++)
{
if (intArray[j] > intArray[j + 1])
{
temp = intArray[j];
intArray[j] = intArray[j + 1];
intArray[j + 1] = temp;
}
}
}
array = intArray;
return array;
}
}
}
在主方法main中调用该排序方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SortHelper
{
class Program
{
static void Main(string[] args)
{
//调用冒泡排序的int 数组
int[] testArray = {1,3,9,4,5,3,2,5,4,5,8,8,8 };
BubbleSortHelper bsh = new BubbleSortHelper();
int[] result = bsh.BubbleSortIntArray(testArray);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Count(); i++)
{
sb.Append(result[i] + ",");
}
sb.Remove(sb.Length - 1,1);
Console.WriteLine(sb);
Console.ReadLine();
}
}
}