交换排序
冒泡排序(升序)
原理:
1.比较相邻的元素,如果第一个数大于第二个数,则交换位置,数值小的放在前,数值大的放在后。完成一次比较。
2.进行数对比较,每次都是比较两个数,(1,2),(2,3),(3,4)…直至最后一对数比较结束,完成一轮比较。其中1,2,3指数字的位置,比较时用当前位置上的数字比较。
3.下一轮比较时,上一轮中最后一位数不需参与比较。重复1,2直至完成排序。

如上图,第二轮比较中,第一次比较:13<47,位置不变,第二次比较47>15,交换位置,47放在第三个位置上。第三轮比较,47>2,交换位置,47放在第四个位置上。第二轮比较结束。
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。

java代码实现:
public static void QuickSort(int low,int high){//low:0,high:数组长度-1,x目标数组,全局变量
int lo=low,hi=high;//lo 低位指针 high 高位指针
if (lo>hi){ return; }
boolean flag= false;//控制指针变化
while(lo<hi){//循环直至左右指针指向同一位置
if (x[lo]<x[hi]){
int tmp =x[lo];
x[lo]=x[hi];
x[hi]=tmp;
//实现了一次交换,指针变换
flag=!flag;
}
if (flag) {lo++;}//true 低位指针右移一位
else {hi--;}//false 高位指针左移一位
}
lo--;hi++;
QuickSort(low,lo);//前一段,递归
QuickSort(hi,high);//后一段,递归
}
本文深入解析了两种常见的排序算法——冒泡排序和快速排序。详细介绍了它们的原理与Java代码实现,帮助读者理解如何通过比较和交换操作实现数据的升序和降序排列。
997

被折叠的 条评论
为什么被折叠?



