直接插入排序
package ch02;
public class InsertSort {
/**
* 直接插入排序演示,从小到大
* 视屏中的排序有点小问题,是第i个和他的前一个相比较,不是和它自身相比较
* @param arr
*/
public static void sort(long[] arr){
long tmp =0;
for(int i =1; i < arr.length; i++){//插入排序是从第二个元素之间插入的,所以位置为2,下标为1,i为一共要复制几轮元素进行插入比较
tmp = arr[i];//拷贝数组中的第一个元素
int j =i;
while(j>0 && arr[j-1] >= tmp){//拷贝完成后将自身和排在前一个元素的相比较,如果小于则将前一个元素拷贝于自身
arr[j] = arr[j-1];
j--;//数组中有多个元素,就不停的进行元素后移操作,但前提是j不能小于0,因为之后要进行位移操作,否则会报空指针异常
}
arr[j] = tmp;//最后把拷贝后的元素,放入空出来的位置,排序完成。
}
}
}
选择排序
package ch02;
public class SelectionSort {
/**
* 选择排序演示,从小到大
* 每一轮,从剩余元素中,取第一个和其他元素相比取最小
* 和视屏上的算法不一样,其实道理相差无几,不过是多引用了一个变脸k的概念。
* @param arr
*/
public static void sort(long[] arr){
long tmp =0;//中间空间
for (int i = 0; i < arr.length-1; i++) {//假如有4个元素,数组长度为4,只需要排序三趟,从第i为0开始,0、1、2
for (int j = i+1; j < arr.length; j++) {//也是比较三次。从第一个元素和剩余的其他元素相比较。
if (arr[i]>arr[j]) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
}
冒泡排序
package ch02;
public class BubbleSort {
public static void sort(long[] arr) {
// TODO Auto-generated method stub
/**
* 冒泡排序演示,从小到大
* 每一轮在剩余元素中两两相较取最小
* 每次排序将剩余元素最小的那个元素放置在这一趟剩余元素的最前面
*/
long tmp =0;//中间空间
for (int i = 0; i < arr.length-1; i++) {//arr.leng-1表示8个元素只需要排序7趟
for (int j = arr.length-1; j>i; j--) {//j>i表示:之前排过的元素就不用比较了
if (arr[j]<arr[j-1]) {//末尾往前开始进行比较交换
//进行交换
tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
}
测试类
package ch02;
public class TestSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
long[] arr = new long[5];
arr[0] =34;
arr[1] =23;
arr[2] =38;
arr[3] =1;
arr[4] =-4;
System.out.print("[");
for(long num : arr){
System.out.print(num+" ");
}
System.out.print("]");
System.out.println();
//BubbleSort.sort(arr);
//SelectionSort.sort(arr);
InsertSort.sort(arr);
System.out.print("[");
for(long num : arr){
System.out.print(num+" ");
}
System.out.print("]");
}
}