以前有句话说程序==算法+数据结构,其实不然,如果说编程像是在盖楼房,那么学好数据结构和算法,就是在打下一个完美的地基。
所以今天闲着无聊,给大家总结总结,几个非常非常基础的算法,这在许多公司的笔试,面试中都要可能出现。今天我所要想讨论的是排序算法,说到排序算法,大家在熟悉不过的是冒泡排序算法,在我后来接触的一些列排序算法中,后来想想每个算法都有其巧妙之处,也不单单是为了追求的时间上的效率。下面我就来列出主要的几种排序算法。
1.冒泡排序算法,平均时间复杂度o(n2),作为一种性能还算不错的排序算法
2.选择排序算法
3.插入排序算法
4.归并排序算法
5.桶排序算法
6.基数排序算法
7.希尔排序算法
8.堆排序算法,其中涉及到了一些数据结果中的一些的知识
9.快速排序算法,快速排序算法,在此类中的 排序性能中算是最好吧,但是如果一组数字基本都是有序的情况的时候,快速排序就又会被退化为冒泡排序,基本排序算法差差不多都列在上面了,具体掌握上述中排序算法的精髓,对于面试还是很有帮助的
----------------------------------------------------------
问题:设有一数组,其大小为10个元素(int str[10])数组内的数据是无序。现在要求我们通过编程将这个无序的数组变成一个从小到大排序的数组(从下标为0开始)
思路:按照题目的要求,毫无疑问,正确的结果应该就像这样: 1 2 3 4 5 6 7 8 9 10 要做到这样,最简单和最直接想到的方法就是进行对比交换。
- 首先,把10个数里最小的个数放到下标为0的位置上(str[0])
- 通过将下标为0的数(str[0])与剩下其余9个数进行对比交换(将较少者放置在下标为0的位置上),就可以得到这10个数最小的那个
- 10个数最小的那位确定后,接下来就要找剩下9个数最小的那个。
- 因为已经确定出一个最小的数,所以就不要动str[0],直接从str[1]开始,与剩下的8个数对比交换,找出9个数中最小的那位放到下标为1(str[1])的位置上
- 继续按照这个思路就可以将这十个数变成有序的(从小到大)的数组