数据结构的三大基础排序算法:冒泡排序,简单选择排序,直接插入排序。下面我来解释:(一律是顺序排序)
首先是冒泡排序:他的排序主旨是把大的数依次排到最后,像冒泡一样,下面是代码:
public static void mp(int arr[]){
int count; //定义一个中间值,用来替换
boolean flag = true; //定义一个标记变量,用来检验是否已经有序
for (int i = 0; i < arr.length && flag; i++) { //进入外层循环
flag = false; //把标记变成假
for (int j = 1; j < arr.length-i; j++) { //进入内层循环
if(arr[j]<arr[j-1]){ //两个数比较,如果前面的大于于后面的,则进行交换(顺序排序)
count = arr[j];
arr[j] = arr[j-1];
arr[j-1] = count;
flag = true; //如果进行了交换,则意味着还没排好序
}
}
System.out.println(i+":"+Arrays.toString(arr));
}
}
第二是简单选择排序:他的排序主旨是每次选择一个最小的,根据角标放到前面
public static void xz(int arr[]){
int count; //定义一个中间变量用来跟最小的换值
int min; //最小值得角标
for (int i = 0; i < arr.length; i++) {
min = i;
for (int j = i+1; j < arr.length; j++) {
if(arr[min] > arr[j]){ //如果这个值不是最小的,那么交换角标,保证最小
min = j;
}
}
if(min != i){ //最小值与前方的值互换,顺序排序
count = arr[i];
arr[i] = arr[min];
arr[min] = count;
}
System.out.println(i+":"+Arrays.toString(arr));
}
}
第三种是直接插入排序:他的排序主旨是把一个值插入到前面比他小的值得后边
public static void cr(int arr[]) {
int i,j;
for (i = 1; i < arr.length; i++) {
int temp = arr[i]; //定义一个存储角标为i的值,为将插入对象
for (j = i - 1; j >= 0 && temp < arr[j]; j--) { //判断是否为需要将其插入到前面,直到比他小
arr[j + 1] = arr[j]; //值向后移动,为将插入值腾出空位,即arr[j]
}
arr[j+1] = temp; //插入到合适位置
System.out.println(i+":"+Arrays.toString(arr));
}
}
这三种简单的排序算法适用于,你待排序序列总是基本有序的。而其中当记录关键字本身信息量很大(比如:关键字是数十位的数字),那么简单选择排序就非常有优势。