1.简介:
从前面的冒泡排序可以发现一个问题,即使只有一个数没排好序,冒泡排序都要把所有相邻的数进行遍历一遍!这样效率就变的很低了!特别是在数非常多时就更加明显!下面就来介绍一种比较高效的排序方法——桶排序
- 先通过图来了解一下桶排序
注意: 椭圆里面的数,就是用于排序的数!长方形数组就是用来记录同样的数出现了几次。椭圆里面的每个数对应着数组的第几个位置,最后从小到大遍历数组,里面出现的数出现几次打印几次,就可以完成排序
下面还是要结合代码具体感受一下!
2.桶排序:
- 代码:
1 static void Main(string[] args) 2 { 3 int[] number = new int[100]; 4 Console.WriteLine("有多少个数:"); 5 int num; 6 if (int.TryParse(Console.ReadLine(), out num)) 7 { 8 for (int i = 0; i < num; i++) 9 { 10 int arr = Convert.ToInt32(Console.ReadLine()); //这里主要讲算法就不进行非法值的判断了 11 number[arr]++; //这就相当于一个桶,相同的数里面的值就自增1;++是值自增1, 12 } //而不是移向下一个数 13 14 } 15 else 16 { 17 Console.WriteLine("转换失败"); 18 } 19 Console.WriteLine("----------------------------------------"); 20 for (int i = 0; i < 100; i++) 21 for (int j = 1; j <= number[i]; j++) 22 { 23 Console.Write(i+" "); 24 } 25 26 Console.ReadKey(); 27 }
这里主要涉及数组知识,和自增运算符!
3.下面简单补充一下时间复杂度的内容:
桶排序虽然能很高效完成排序!但是从上面的程序可知,非常浪费空间!算法之间没有哪种算法是非常好的,根据实际情况选择!在接下来可以了解一下简单排序(之三)快速排序