/*******************************************************
*快速排序 (比较排序类)
*每次排序将待排记录分割两部分,一部分都比关键字小,一部分都比关键字大
********/
public void quickSort(int[] L) {
Qsort(L,1,L.length-1);
}
public void Qsort(int[] L,int low,int high) {
int pivot;
if(low<high) {
//将L[low,high]一分为二,算出枢轴值pivot,该值得位置固定,不用再变化
pivot=partition0(L,low,high);
//对两边的数组分别排序
Qsort(L,low,pivot-1);
Qsort(L,pivot+1,high);
}
}
// 选择一个枢轴值(关键字) 把它放到某个位置 使其左边的值都比它小 右边的值都比它大
public int partition0(int[] L,int low,int high) {
int pivotkey;
pivotkey=L[low];
//顺序很重要,要先从右边找
while(low<high) {
while(low<high && L[high]>=pivotkey) { //从后往前找到比key小的放到前面去
high--;
}
swap(L,low,high);
while(low<high && L[low]<=pivotkey) { //从前往后找到比key大的 放到后面去
low++;
}
swap(L,low,high);
} //遍历所有记录 low的位置即为 key所在位置, 且固定,不用再改变
return low;
}
public void swap(int[] L,int i,int j) { //交换数组的两个位置
int temp=L[i];
L[i]=L[j];
L[j]=temp;
}
冒泡:
public static void maoPao(int[] arr){
for(int i = 0;i < n-1;i++){//比较的轮次
for(int j = 0;j < n-i-1;j++){//每一轮比较的次数
if(arr[j] < arr[j+1]){//交换条件
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
}
}
}
}