思路:排序后的数组从小到大排列,每次相邻的两个数比较,把更大的数后移,每次都会得出未排序部分中最大的数。语句的总执行次数为a1=n,d=1的等差数列的和,所以时间复杂度为:O(n^2)。
代码如下:
public static int[] BubbleSort(int[] nums)
{
for(int i=0;i<nums.Length-1;i++)
{
//把大的数放在数组的nums.Length-1-i位置上
//当i=0时最大的数在最后面,依次循环下去
for (int j=0;j<nums.Length-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int temp = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = temp;
}
}
}
return nums;
}
Main方法:
static void Main(string[] args)
{
int[] nums = new int[] { 23, 44, 66, 76, 98, 11, 3, 9, 7 };
Console.WriteLine("冒泡排序前的数组:");
foreach (int item in nums)
Console.Write(item + " ");
Console.WriteLine();
nums = BubbleSort(nums);
Console.WriteLine("冒泡排序后的数组:");
foreach (int item in nums)
Console.Write(item + " ");
Console.ReadKey();
}
总结:自己在纸上写一下每次循环之后的数组思路会更清晰。