java排序及泛型
阅读原文时间:2023年07月13日阅读:1

/**
* 快速排序
*
* @author chx
*
*/
public class QuickSort {
/**
* 数组内数值的交换函数
*
* @param arr
* 原数组
* @param leftIndex
* 左索引
* @param rightIndex
* 右索引
*/
private static void change(T[] arr, int leftIndex, int rightIndex) {
T temp = arr[leftIndex];
arr[leftIndex] = arr[rightIndex];
arr[rightIndex] = temp;
}

public static <T> void sort(T\[\] arr, int left, int right) {  
    if (right < left) {  
        // 查找区间内,外的返回  
        return;  
    }  
    T flag = arr\[left\];// 哨兵的值  
    int indexLeft = left;// 本轮查找需要的左索引  
    int indexRight = right;// 本轮查找需要的右索引

    while (indexLeft != indexRight) {  
        // 开始从右向左找,找比哨兵小的值。或者直到遇到左索引  
        while (Integer.parseInt(arr\[indexRight\].toString()) >= Integer.parseInt(flag.toString())  
                && indexLeft < indexRight) {  
            indexRight--;  
        }  
        // 从左向右找,找到比哨兵大的值,或者直到遇到右索引  
        while (Integer.parseInt(arr\[indexLeft\].toString()) <= Integer.parseInt(flag.toString())  
                && indexLeft < indexRight) {  
            indexLeft++;  
        }  
        if (indexLeft < indexRight) {  
            // 找到了,交换  
            change(arr, indexLeft, indexRight);  
        }  
    }  
    // 此时一遍探索结束,将哨兵和当前的值进行交换,并进行分区探索  
    change(arr, left, indexLeft);  
    // 右边探索  
    sort(arr, indexRight + 1, right);  
    // 左边探索  
    sort(arr, left, indexLeft - 1);  
}  

}

  突然有个同学咨询Arrays.sort用法,正好在此记录。

  1.简介:有的时候不愿意去写排序程序,可以利用java自带的Arrays.sort()方法。

2.使用规则:总结为,基本数据类型直接放,引用数据类型需要利用实现了Comparator的对象辅助排序。

3.具体用法:

package mianshi;

import java.util.Arrays;
import java.util.Comparator;

public class SortTest implements Comparator {
private int sortValue;

public int getSortValue() {  
    return sortValue;  
}

public void setSortValue(int sortValue) {  
    this.sortValue = sortValue;  
}

public static void main(String\[\] args) {  
    SortTest\[\] list = new SortTest\[5\];

    for (int i = 0; i < list.length; i++) {  
        list\[i\] = new SortTest();  
        list\[i\].setSortValue(i\*2);  
    }

    Comparator<SortTest> cmp = new SortTest();  
    Arrays.sort(list, cmp);

    for (int i = 0; i < list.length; i++) {  
        System.out.print(list\[i\].getSortValue() + " ");  
    }  
}

@Override  
public int compare(SortTest o1, SortTest o2) {  
    if (o1.getSortValue() > o2.getSortValue()) {  
        return -1;  
    }else if(o1.getSortValue() < o2.getSortValue()) {  
        return 1;  
    }

    return 0;  
}  

}

返回值规则:compare是实现对比的方法,正数-大于,0-等于,负数-小于。所以本程序是倒序排序。

tips:感兴趣的可以百度下compare的实现原理、算法选择。有很多需要了解的内容。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章