冒泡排序(升序)
原理:
1.比较相邻的元素,如果第一个数大于第二个数,则交换位置,数值小的放在前,数值大的放在后。完成一次比较。
2.进行数对比较,每次都是比较两个数,(1,2),(2,3),(3,4)…直至最后一对数比较结束,完成一轮比较。其中1,2,3指数字的位置,比较时用当前位置上的数字比较。
3.下一轮比较时,上一轮中最后一位数不需参与比较。重复1,2直至完成排序。
java代码实现:
public void bobo(int[] a){
for (int i = 0; i < a.length-1; i++) {//需要进行比较的轮数
for (int j = 0; j < a.length-1-i; j++) {//每轮进行比较的次数
if (a[j]<a[j+1]){//前一位数值大于后一位数值,则交换位置
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
快速排序(降序)
原理:
1.原数组首末位下标设置位low/lo,high/hi。当lo上的数字小于hi上的数字时,交换位置,同时,低位指针lo右移;否则,高位指针hi左移,当lo>=hi时,结束一轮交换。
2.以lo所指位置分为两段,lo-1,hi+1前一段[low,lo],后一段[hi,high],每段各自进行步骤1。
public void quick(int low,int high,int[] arr){//low:0,high:数组长度-1,arr目标数组
int lo=low,hi=high;//lo 低位指针 high 高位指针
if (lo>hi){
return;
}
boolean flag= false;//控制指针变化
while(lo<hi){//循环直至左右指针指向同一位置
if (arr[lo]<arr[hi]){
int tmp =arr[lo];
arr[lo]=arr[hi];
arr[hi]=tmp;
//实现了一次交换,指针变换
flag=!flag;
}
if (flag) {lo++;}//true 低位指针右移一位
else {hi--;}//false 高位指针左移一位
}
lo--;hi++;
quick(low,lo);//前一段,递归
quick(hi,high);//后一段,递归
}