java基础----算法

算法

  • 冒泡排序:从第一个数开始,比较相邻两个数的大小,如果前>后,交换位置,一轮结束后可以确定最后那个数是最大值,第二轮不管第一轮的最大值,再从第一个数开始比较相邻两数,比较到第一轮最大值前面结束,此时确定倒数第二个数在第二最大值,如此循环,每轮过后轮次+1,随着轮次增加每轮比较的次数下降
public void sort(int[] c){

    for(int i=0;i<c.length-1;i++){//比较的轮数
        for(int j=0;j<c.length-1-i;j++){//每轮比较的次数
            if(c[j]>c[j+1]){
                int temp = c[j+1];
                c[j+1] = c[j];
                c[j] = temp;
            }
        }
    }
}
  • 选择排序:第一轮:从第一个数开始,第二个数直到最后一个数都和第一个数比较,比第一个数就交换位置,一轮过后第一个数为最小值;第二轮:从第二个数开始,第三个数直到最后一个数都和第二个数比较,。。。。这样每轮都能确定!这轮!最前面的数是最小的。如此循环
public void sort(int[] c){

        for(int i=0;i<c.length-1;i++){//比较的轮数,c[i]表示为这轮的目标,后面的数都和从c[i]比较
            for(int j=i+1;j<c.length;j++){
                if(c[i]>c[j]){
                    int temp = c[j];
                    c[j] = c[i];
                    c[i] = temp;
                }
            }
        }
   }
  • 快速排序:递归思想,选第一个数为基准值,开始索引坐标start=0,end=length-1;基准值一直不变
    • 第一次从最后往前每个数都和基准值比较,基准值大,交换位置,end坐标发生变化
    • 第二次从最前往后每个数都和基准值比较,基准值小,交换位置,start坐标发生变化
    • 重复上面两个步骤,直到start>=end,此时以基准值为中心,左边序列都比基准值小,右边序列都比基准值大,对左右两边序列进行递归
public void sort(int c[], int start, int end) {  
        int i, j;  
        i = start;  
        j = end;  
        if ((c == null) || (c.length == 0))  
            return;  

        while (i < j) {//查找基准点下标  
            while (i < j && c[i] <= c[j])  
                // 以数组start下标的数据为key,右侧扫描  
                j--;  
            if (i < j) { // 右侧扫描,找出第一个比key小的,交换位置  
                int temp = c[i];  
                c[i] = c[j];  
                c[j] = temp;  
            }  
            while (i < j && c[i] < c[j])  
                // 左侧扫描(此时c[j]中存储着key值)  
                i++;  
            if (i < j) { // 找出第一个比key大的,交换位置  
                int temp = c[i];  
                c[i] = c[j];  
                c[j] = temp;  
            }  
        }  
        if (i - start > 1) { // 递归调用,把key前面的完成排序  
            quickSort(c, 0, i - 1);  
        }  
        if (end - j > 1) {  
            quickSort(c, j + 1, end); // 递归调用,把key后面的完成排序  
        }  
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值