基本排序包括:冒泡排序、选择排序和插入排序。时间复杂度均为O(n*n)
1、冒泡排序:
每轮遍历,将最小的元素从后浮到最前面。为了防止在元素序列有序后还进行遍历,特地插入一个标志位。
public void bubbleSort(int[] a){
if(a==null||a.length()<2) return;
boolean flag = true;//标志,如果一轮遍历没有元素调整,说明有序
for(int i = 0;i<a.length()&&flag;i++){
flag = false;
for(int j = a.length()-1;j>=i;j--){
if(a[j]<a[j-1]){
swap(a,j,j-1);
flag = true;
}
}
}
}
2、选择排序:
每次找到剩余元素中最小的一个元素。
public void selectSort(int a[]){
if(a==null||a.length()<2) return;
for(int i = 1;i<a.length();i++){
int min = i;
for(int j = i;j>=0;j--){//每一轮遍历找到最小的
if(a[min]>a[j]){
min = j;
}
}
swap(a,i,min);//交换
}
}
插入排序就是前面是有序的,然后从插入位置比较、交换
public void insertSort(int[] a){
if(a==null||a.length<2) return;
for(int i = 1;i<a.length;i++){
for(int j = i;j>=1&&a[j]<a[j-1];j--){
swap(a,j,j-1);
}
}
}
public void sort(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}