[toc]
JAVA八大排序算法
插入排序
解释
总体思路:
位于表中后面的元素依次与表中前面的元素进行比较,如果比它小,就需要继续和更前面的元素比较,直到遇到一个比它大的元素或者是比较到第一个元素。
具体
- 先将第一个元素视为有序,用第二个元素与第一个元素进行比较,如果比第一个小,就插入到第一个元素之前;第三个元素再依次与第二个元素,第一个元素进行比较;第四个元素再依次与第三个,第二个,第一个元素进行比较... 通过这样依次的比较分别插入到合适的位置形成一个有序表。
- 不管初始序列如何,总需要N-1趟排序,第一趟是第二个参数与第一个参数的比较;第二趟是第三个元素与前2个元素的比较;第三趟是第四个元素与前3个元素的比较...
- 当初始序列有序时,第一趟只需要比较一次,第二趟只需比较一次...所以总共只需要比较N-1次就可以完成排序。当初始序列逆序的时候,第一趟比较一次,第二趟比较二次...第N-1趟比较N-1次。总共比较n(n-1)/2次。
- 直接插入排列是基于明确的相邻位置的两个元素的比较,因此该算法是稳定的。排序过程的比较次数与待排序列的初始状态有关。每进行一趟排列并不能唯一地确定下一个元素的最终位置。
代码实现
/**
* 插入排序
*
* @param array
*/
private static void sortInsert(int[] array) {
int length = array.length;
int insertNum;
for (int i = 1; i < length; i++) {
insertNum = array[i];
int j = i - 1;
while (j > 0 && array[j] > insertNum) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = insertNum;
}
for (int i :
array) {
System.out.print(i + " ");
}
}
冒泡排序
解释
总体思路
比较2个相邻的数,将值大的元素交换到右端,因此,进行完第一个排序后,必然会唯一确定出最大的元素;进行完第二趟排序后,必然会确定出第二大的元素...
具体
- 因为它是基于相邻两个元素之间的比较,因此它的算法是稳定的
- 当元素初始序列是有序的情况下,在一趟冒泡排序中只需要进行N-1次比较,没有进行交换操作就可以完成排序
- 当元素初始序列是有序的情况下,第一趟N-1次选出最大元素,第二趟N-2次选出第二大元素...平均的时间复杂度为o(n^2)。
代码实现
/**
* 冒泡排序
*
* @param array
*/
public static void sortBubble(int[] array) {
int length = array.length;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
}
网友评论