问题:输入数字a1,a2,a3...an,使其升序输出。
1、插入排序-insertion sort
·算法:
这个算法从数组的第二个元素开始循环,将选中的元素与之前的元素一一比较,如果选中的元素小于之前的元素,则将之前的元素后移,最后再将选中的元素放在合适的位置。在这个算法执行的过程中,总是保持着索引i之前的数组是升序排列的。
package algorithm;
public abstract class InsertSort {
public static void sort(int[] numbers){
for (int i = 1; i < numbers.length; i++) {
int currentNumber = numbers[i];
int j = i - 1;
while (j >= 0 && numbers[j] > currentNumber) {
numbers[j + 1] = numbers[j];
j--;
}
numbers[j + 1] = currentNumber;
}
}
}
·running time:
·逆序情况耗时最多
·运行时间上界T(n)=θ(n²);
2、归并排序-merge sort
·算法:
将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
·running time
递归表达式:T(n)=2T(n/2)+O(n)
时间复杂度为O(nlogn)