1.冒泡排序
思想:对相邻的元素进行两两比较,如果arr[j+1]<arr[j]的话,则交换位置,【重点是相邻两个互换位置】
图示:
代码:
public class BubbleSort {
public static void sort(long[] arr) {
long tmp = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j<arr.length -- 1;j++) {
if(arr[j+1] < arr[j]) {
//进行交换
tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
}
public static void main(String[] args) {
long[] arr = {1,3,34,22,10};
sort(arr);
System.out.print("[");
for(long num:arr){
System.out.print(num+" ");
}
System.out.print("]");
}
}
2.选择排序
思想:每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,(将每次遍历后的最小值arr[k]与arr[i]互换位置,k为最小值的索引)【重点是每次遍历首元素与每次遍历出的最小值互换位置】
图示:
代码:
public class SelectSort {
public static void sort(long[] arr) {
int k=0;
long tmp = 0;
for(int i=0;i<arr.length-1;i++){
k = i;
for(int j=i; j<arr.length;j++){
if(arr[j] < arr[k]){
k=j;
}
}
tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
}
}
public static void main(String[] args) {
long[] arr = {1,3,34,22,10};
sort(arr);
System.out.print("[");
for(long num:arr){
System.out.print(num+" ");
}
System.out.print("]");
}
}
3.插入排序
思想:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。【重点是待插入数组的第一个数在有序组里的排序】
图示:
代码:
public static void sort(long[] arr) {
long temp = 0;
for(int i=1; i<arr.length;i++){
temp = arr[i];
int j=i;
while(j>0 && arr[j-1] >temp){
arr[j] = arr[j-1];
j--;
}
arr[j] = temp;
}
}
public static void main(String[] args) {
long[] arr = {1,55,34,22,10};
sort(arr);
System.out.print("[");
for(long num:arr){
System.out.print(num+" ");
}
System.out.print("]");
}