数组:有序的元素序列,有下标(角标),插入快,查找、删除慢,大小固定只能存储单一元素;有序数组比无序数组查询快。
常见排序:
1、选择排序(优点:数据移动次数已知为(n-1)次; 缺点:不稳定,比较次数多)
-从待排序序列中,找到关键字最小的元素;
-如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
-从余下的 N - 1 个元素中,找出关键字最小的元素,重复上诉一、二步骤,直到排序结束。
2、冒泡排序(优点:稳定、简单 ; 缺点:慢,每次只能移动相邻的两个数据 一般不会用冒泡排序,性能慢)
-比较两个相邻的元素,如果第一个比第二个大,就交换位置;
-对每一对相邻的元素做上诉比较,从第一对到最后一对,这时候,最后一个元素就是最大的元素;
-针对所有元素重复上面步骤,除了最后一个元素;
-一直比较,直到没有任何元素需要比较。
3、插入排序(优点:稳定,快; 缺点:比较次数不一定,当数据总量庞大的时候,比较次数越少,插入点后的数据移动越多,但用链表可以解决这个问题)
4、快速排序(优点:极快,数据移动少; 缺点:不稳定)
5、希尔排序(优点:快,数据移动少; 缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取)
6、箱排序(优点:快,效率达到O(1) 缺点:数据范围必须为正整数并且比较小)
7、归并排序
-归并排序是一种非就地排序,将需要与待排序序列一样多的辅助空间。在使用它对两个己有序的序列归并,将有无比的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n)。
对数据的有序性不敏感。若数据节点数据量大,那将不适合。但可改造成索引操作,效果将非常出色。
8、堆排序
由于它在直接选择排序的基础上利用了比较结果形成。效率提高很大。它完成排序的总比较次数为O(nlog2n)。它是对数据的有序性不敏感的一种算法。
但堆排序将需要做两个步骤:-是建堆,二是排序(调整堆)。所以一般在小规模的序列中不合适,但对于较大的序列,将表现出优越的性能。