目录
排序算法的稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,A1=A2,且A1在A2之前,而在排序后的序列中,A1仍在A2之前,则称这种排序算法是稳定的;否则称为不稳定的。
插入排序
理解:插入排序主要分为两部分,一部分数据是有序的,一部分是无序的,取无序的第一个元素和有序的数据进行比较,修改值。
/**
* 插入排序
*/
public class Insert {
public static void main(String[] args) {
int[] ints = {7, 6, 5, 8, 9, 1};
for (int i = 1; i < ints.length; i++) {
insert(ints,i);
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
}
private static void insert(int[] arr, int n) {
int key = arr[n];
int i=n;
while(arr[i-1]>key){
arr[i]=arr[i-1];
i--;
if (i==0){
break;
}
}
arr[i]=key;
}
}
冒泡排序
/**
* 冒泡排序
*/
public class Test {
public static void main(String[] args) {
int[] ints = {7, 6, 5, 8, 9, 1};
for (int i = 0; i < ints.length; i++) {
bubble(ints);
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
}
private static void bubble(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int temp = 0;
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
选择排序
/**
* 选择排序
*/
public class Selection {
public static void main(String[] args) {
int[] ints = {7, 6, 5, 8, 9, 1};
for (int i = 0; i < ints.length; i++) {
select(ints);
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
}
private static int[] lookMax(int[] arr,int length) {
int max = 0;
int is = 0;
for (int i = 0; i < length; i++) {
if (arr[i] > max) {
max = arr[i];
is = i;
}
}
int[] res={max,is};
return res;
}
private static void select(int[] arr) {
int length = arr.length;
while (length > 0) {
int temp = 0;
temp = arr[length - 1];
int[] ints = lookMax(arr, length);
arr[length - 1] = ints[0];
arr[ints[1]] = temp;
length--;
}
}