冒泡排序
重复走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把他们交换过来。走访数列的工作是重复的进行直到没有再进行交换的数列。
public void bubbleSort(int[] array){
int[] a = array;
for(int i = 0;i < a.length;i ++){
for(int j = i+1;j < a.length;j ++){
//从小到大排序
if(a[i] > a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(int num : array){
System.out.print(num+",");
}
}
快速排序
选择一个关键字作为基准值,比基准值小的都在左边序列,比基准值大的都在右边序列,一般选择第一个元素作为基准值。
先从后往前依次比较,若发现比基准值小的则将该元素与基准值交换位置,然后再从前往后依次与基准值比较,若发现比基准值大的则将该元素与基准值交换位置,直到从后往前的比较索引大于从前往后的比较索引,结束第一次循环,此时对于基准值来说左边都比它小右边都比它大,但左右两边的序列不一定是有序的,因此需要递归。
public void fastSort(int a[],int low,int high){
int key = a[start];
int start = low;
int end = hegh;
while(end>start){
//从后往前比较
while(end>start&&a[end]>=key){ //若最后一个数大于基准值
end--;
}
if(a[end]<key]{
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
while(end>start&&a[start]<=key){
start++;
}
if(a[start]>key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//此时第一次循环结束
}
//递归
if(start>low) //说明start不是第一个
fastSort(a,low,start-1);
if(end < high){ //说明end不是最后一个
fastSort(a,end+1,high);
}
}