冒泡排序,就是将一个数组中的元素按照从大到小或者从小到大排序.
int[] nums={9,8,7,6,5,4,3,2,1,0}; //我们将它升序排序
思考的内容:
第一趟比较:8 7 6 5 4 3 2 1 0 9 //交换了9次 第一趟比较时i=0 交换了9次j=9 j=9 可写成j=nums.Length-1-0
第二趟比较:7 6 5 4 3 2 1 0 8 9 //交换了8次 第一趟比较时i=1 交换了9次j=8 j=8 可写成j=nums.Length-1-1
第三趟比较:6 5 4 3 2 1 0 7 8 9 //交换了7次 第一趟比较时i=2 交换了9次j=7 j=7 可写成j=nums.Length-1-2
第四趟比较:5 4 3 2 1 0 6 7 8 9 //交换了6次 第一趟比较时i=3 交换了9次j=6
第五趟比较:4 3 2 1 0 5 6 7 8 9 //交换了5次 第一趟比较时i=4 交换了9次j=5
第六趟比较:3 2 1 0 4 5 6 7 8 9 //交换了4次
第七趟比较:2 1 0 3 4 5 6 7 8 9 //交换了3次
第八趟比较:1 0 2 3 4 5 6 7 8 9 //交换了2次
第九趟比较:0 1 2 3 4 5 6 7 8 9 //交换了1次
外层循环 里层循环
由此可见这个是一个循环的嵌套
//总共是10个数,但是比较了9次就完成了排序,故循环九次即可
for(int i=0;i<nums.Length-1;i++)
{
for(int j=0;j<nums.Length-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
冒泡排序的练习:
namespace _17.冒泡排序
{
class Program
{
static void Main(string[] args)
{
int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; //我们将它升序排序
/*
思考的内容:
第一趟比较:8 7 6 5 4 3 2 1 0 9 //交换了9次 第一趟比较时i=0 交换了9次j=9 j=9 可写成j=nums.Length-1-0
第二趟比较:7 6 5 4 3 2 1 0 8 9 //交换了8次 第一趟比较时i=1 交换了9次j=8 j=8 可写成j=nums.Length-1-1
第三趟比较:6 5 4 3 2 1 0 7 8 9 //交换了7次 第一趟比较时i=2 交换了9次j=7 j=7 可写成j=nums.Length-1-2
第四趟比较:5 4 3 2 1 0 6 7 8 9 //交换了6次 第一趟比较时i=3 交换了9次j=6
第五趟比较:4 3 2 1 0 5 6 7 8 9 //交换了5次 第一趟比较时i=4 交换了9次j=5
第六趟比较:3 2 1 0 4 5 6 7 8 9 //交换了4次
第七趟比较:2 1 0 3 4 5 6 7 8 9 //交换了3次
第八趟比较:1 0 2 3 4 5 6 7 8 9 //交换了2次
第九趟比较:0 1 2 3 4 5 6 7 8 9 //交换了1次
*/
for (int i = 0; i < nums.Length - 1; i++)
{
for (int j = 0; j < nums.Length - 1 - i; j++)
{
if (nums[j] > nums[j + 1]) // > 进行升序判断
{
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
foreach (var element in nums)
{
Console.WriteLine(element);
}
Console.ReadKey();
}
}
}
可能会出现的面试题:
(1).不使用第三方变量,交换两个变量的值
(2).冒泡排序
(3).求一个字符串中每一个字母出现的次数.
实际上C#内置了数组排序的方法,我们可以调用Sort(),对代码进行排序.
但是,面试的时候,我们必须手写冒泡排序的原理.
数组的两个方法:
Array数组类 Array类是一个静态类
Sort();方法只能针对数组进行升序排序
Reverse(); 方法,会对数组的内容的进行反转.