数组排序

来源:互联网 发布:格林奶奶的睡美人知乎 编辑:程序博客网 时间:2024/05/20 05:24
一:冒泡排序
数组排序之冒泡排序,两两比较,大的往后放放,第一次比较完毕之后,最大值就出现在了最大索引出,继续依次比较,得到一个排好序的数组!
public class Test {    public static void main(String[] args) {        //定义数组,并且静态初始化        int[] arr = {69,80,24,57,13} ;        System.out.println("排序前:");        //遍历:        printArray(arr) ;        bubbleSort(arr);        System.out.println("排序后:");        printArray(arr);    }    //将冒泡排序封装成一个功能代码块    public static void bubbleSort(int[] arr){        for(int x = 0 ; x < arr.length-1;x++){            for(int y = 0 ; y<arr.length-1-x ; y++){                if(arr[y]>arr[y+1]){                    int temp = arr[y] ;                    arr[y] = arr[y+1] ;                    arr[y+1] = temp ;                }            }        }    }    //数组遍历的方法    public static void printArray(int[] arr){        System.out.print("[");        for(int x = 0 ; x < arr.length ; x ++){            if(x==arr.length-1){                System.out.println(arr[x]+"]");            }else{                System.out.print(arr[x]+", ");            }        }    }}

二:选择排序
数组排序之:选择排序:用0索引依次和后面的索引进行比较,第一次比较完毕之后,最小值出现在了最小索处!同理,其他索引也是依次进行比较!
public class ArrayDemo {    public static void main(String[] args) {        //定义一个数组,静态初始化:        int[] arr = {24,69,80,57,13} ;        System.out.println("排序前:");        printArray(arr) ;        //使用功能代码进行封装:最终版代码        selectSort(arr);        System.out.println("排序后:");        //遍历        printArray(arr);    }    //选择排序的方法    public static void selectSort(int[] arr){        for(int x = 0 ; x < arr.length-1 ; x ++ ){            for(int y = x +1 ; y < arr.length ; y++){                if(arr[y]<arr[x]){                    int temp = arr[x] ;                    arr[x] = arr[y] ;                    arr[y] = temp ;                }            }        }    }    //遍历数组的方法    public static void printArray(int[] arr){        System.out.print("[");        for(int x = 0 ; x < arr.length ; x ++){            if(x==arr.length-1){                System.out.println(arr[x]+"]");            }else{                System.out.print(arr[x]+", ");            }        }    }}

举例: 把字符串中的字符进行排序,改进键盘录入
举例:”dacgebf”
结果:”abcdefg”

    1)键盘录入一个字符串    2)吧字符转换字符数组    3)冒泡排序,可以功能区实现/    4)所以将字符数组转换成字符串
public class ArrayTest {    public static void main(String[] args) {        //创建键盘录入对象        Scanner sc = new Scanner(System.in) ;        //录入并接收数据        System.out.println("请输入一个字符串:");        String line = sc.nextLine() ;        //将字符串转换字符数组        char[] chs = line.toCharArray() ;        //排序        bubbleSort(chs);        //将字符数组转换成字符串        String result = String.valueOf(chs) ;        System.out.println("result:"+result);    }    public static void bubbleSort(char[] chs){        for(int x = 0 ; x < chs.length-1; x++){            for(int y = 0 ; y<chs.length-1-x; y++){                if(chs[y]>chs[y+1]){                    char temp = chs[y] ;                    chs[y] = chs[y+1] ;                    chs[y+1] = temp ;                }            }        }    }}

三:数组高级部分:查找
基本查找:数组元素查表法(查询数组中的元素第一次在数组中出现的索引):从头查到尾

数组二分查找(折半查找)

思路:
1)定义最大索引和最小索引
2)计算出中间索引:
如果要查的元素和中间索引对应的元素相等,返回中间索引
* 如果不相等
* 大了,左边找
* 小了右边找
* 3)重写计算出中间索引:
* 大了:max = mid -1 ;
* 小了:min = mid+1 ;
* 4)继续回到(2)进行重新计算在查找!

public class ArrayDemo {    public static void main(String[] args) {        //定义数组,有序数组,静态初始化        int[] arr = {11,22,33,44,55,66,77};        int index = getIndex(arr,55) ;        System.out.println("index:" +index);        int index2 = getIndex(arr,555) ;        System.out.println("index2:"+index2);    }    /*     *将二分查找写一个功能     *  两个明确:     *      明确返回值类型:int类型     *      明确参数类型:int ,两个参数     */    public static int getIndex(int[] arr,int value){        //1)定义最大索引,和最小索引        int max = arr.length -1 ;        int min = 0 ;        //2)计算出中间索引        int mid = (max+min)/2 ;        //3)查找该该元素是否和中间索引对应的元素一致;        while(arr[mid]!=value){            //不想等,            if(arr[mid]>value){                max = mid -1 ;            }else if(arr[mid]<value){                min = mid +1 ;            }                //会有查不到的情况.始终会有些元素查不到!                if(min>max){                    return -1 ;                }                //重写进行计算                mid = (max+min)/2 ;            }        return mid ;    }}
原创粉丝点击