java快速排序和统计字符串中各个字母对应的个数

快速排序:

base:基数,其左边数值都小于它,其右边数值都大于它。

left:左指针

rigt:右指针

/**
 * 快速排序的一步
 * 将大于放右边;小于放左边
 *
 * @param array
 * @param left
 * @param right
 * @return left
 */
public int sortStep(int[] array, int left, int right) {
    int base = array[left];//基数
    //循环
    //将大于放右边
    while (left < right) {
        //结束循环时right对应元素小于基数
        while (left < right && array[right] >= base) {
            right--;//右往左移动
        }
        array[left] = array[right];//赋值
        //结束循环时left对应元素大于基数
        while (left < right && array[left] <= base) {
            left++;
        }
        array[right] = array[left];//赋值
    }
    array[left]=base;
    return left;
}

/**
 *
 * 快速排序法
 * @param array
 * @param left
 * @param right
 */
public void quickSort(int array[],int left,int right) {

    //方法递归,自己调用自己形成递归
    if (left<right){
      int  baseModel =  sortStep(array, left, right);
      quickSort(array,left,baseModel-1);//基数左边
      quickSort(array,baseModel+1,right);//基数右边
    }

}

/**
 * 升序
 * @param array
 */
 public void sort(int array[]){
     quickSort(array,0,array.length-1);
 }

public static void main(String [] args){

int array[] = {12,45,45,78,6,1,3,7};

sort(array,0,right);

for (int el:array
     ) {
    System.out.print(el+" ");
}

}

 

基本思想:

快速排序:
            (1)以左边第一个为基数,取出;right从右往左找到一个比基数小的替换左一,
            然后,left往右找到一个比right大的数替换;一直循环直到left与right重合将基数赋值。
            
            这时基数左边的数都比它小,右边的数都比它大;
            然后左右分别重复执行,直到完全排序完成。
        方法的递归:
            方法自己调用自己:注意结束条件的设置

 

 

统计字母个数:

我的思想是:通过整型一个数组有序的记录各个字母的个数

在根据ASCLL码表将下标转化为字母打印输出。

原理特别简单,主要是注意大小写字母之间有6个其他字符!!!!

public class StrCount {

    public void counts(String s, int[] sc) {
        int count=0;
        for (char i : s.toCharArray()) {
            if (i >= 97 && i < 97 + 26) {
                sc[i - 'a' + 32]++;
                count++;
            } else if (i >= 65 && i < 65 + 26) {
                sc[i - 'A']++;
                count++;
            }
            /*if(i>=65 && i<=122) {
                sc[i-65]++;
            }*/
            if (count==sc.length){
                break;
            }
        }
        for (int i = 0; i < sc.length; i++) {
            char j = (char) (i + 65);
            if (sc[i] != 0) {
                System.out.print(sc[i] + "" + j + " ");
            }
        }
    }

    public static void main(String[] args) {
        StrCount strCount = new StrCount();
        String str = "dhaASHJSHadadjJJJJaGHDGHDzZ";
        int sc[] = new int[64];
        strCount.counts(str, sc);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值