zoukankan      html  css  js  c++  java
  • 几种排序算法的Java实现

    结论:

    代码:

    import java.util.Scanner;
    
    public class Sort{
        public static void swap(int[] arr,int a,int b){
            arr[a]=arr[a]+arr[b];
            arr[b]=arr[a]-arr[b];
            arr[a]=arr[a]-arr[b];
        }
    
        /***
         * 稳定,O(n²)
         */
        public static void bubbleSort(int[] nums){
            int N = nums.length;
            for(int i=0;i<N;i++){
                for(int j=0;j<N-1-i;j++){
                    if(nums[j]>nums[j+1]){
                        swap(nums,j,j+1);
                    }
                }
            }
            System.out.println("bubble:");
            for(int i=0;i<N;i++){
                System.out.print(nums[i]+" ");
            }
    
        }
    
        /**
         * 不稳定,O(n²)
         */
        public static void selectSort(int[] nums){
            int N = nums.length;
            for(int i=0;i<N;i++){
                int MIN = i;
                for(int j=i+1;j<N;j++){
                    if(nums[j]<nums[MIN]){
                        MIN = j;
                    }
                }
                swap(nums, i, MIN);
            }
            System.out.println('
    '+"select:");
            for(int i=0;i<N;i++){
                System.out.print(nums[i]+" ");
            }
    
        }
    
        /**
         * 稳定,O(n²)
         */
        public static void insertSort(int[] nums) {
            int N = nums.length;
            for(int i=1;i<N;i++){
                for(int j=i;j>0&&nums[j]<nums[j-1];j--){
                    swap(nums,j,j-1);
                }
                
            }
            System.out.println("
    "+"inset:");
            for(int i=0;i<N;i++){
                System.out.print(nums[i]+" ");
            }
    
        }
    
        /**
         * 不稳定,O(n)-O(n²)
         */
        public static void shellSort(int[] nums){
            int gap;
            int N = nums.length;
            for(gap=N/2;gap>0;gap/=2){
                for(int i=gap;i<N;i++){
                    for(int j=i-gap;j>=0&&nums[j]>nums[j+gap];j-=gap){
                        swap(nums, j, j+gap);
                    }
                }
            }
            System.out.println("
    "+"shell:");
            for(int i=0;i<N;i++){
                System.out.print(nums[i]+" ");
            }
        }
    
        /**
         * 不稳定,O(nlogn)
         */
        public static void quickSort(int[] nums){
            int low = 0,high=nums.length-1;
            quickSort(nums, low, high);
            System.out.println("
    "+"quick:");
            for(int i=0;i<nums.length;i++){
                System.out.print(nums[i]+" ");
            }
        }
        public static int getMiddle(int[] nums,int left,int right){
            int i=left,j=right;
            int key=nums[left];
            while(i<j){
                while(nums[j]>=key&&i<j)
                    j--;
                nums[i]=nums[j];
                while(nums[i]<=key&&i<j)
                    i++;
                nums[j]=nums[i];
            }
            nums[i]=key;
            return i; 
        }
        public static void quickSort(int[] nums,int low ,int high){
            if(low<high){
                int middle = getMiddle(nums, low, high);
                quickSort(nums, low, middle-1);
                quickSort(nums, middle+1, high);
            }
        }
    
        /**
         * 稳定,O(nlogn)
         */
        public static void mergeSort(int[] nums){
            int[] temp = new int[nums.length];
            mergeSort(nums, 0, nums.length-1, temp);
            System.out.println("
    "+"merge:");
            for(int i=0;i<nums.length;i++){
                System.out.print(nums[i]+" ");
            }
            
        }
        public static void mergeSort(int[] arr,int left,int right,int[] temp) {
            if(left<right){
                int mid=(left+right)/2;
                mergeSort(arr, left, mid, temp);
                mergeSort(arr, mid+1, right, temp);
                merge(arr, left, mid, right, temp);
            }
        }
        public static void merge(int[] arr, int left, int mid, int right, int[] temp){
            int i=left;
            int j=mid+1;
            int t=0;
            while(i<=mid&&j<=right){
                if(arr[i]<=arr[j]){
                    temp[t++]=arr[i++];
                }else{
                    temp[t++]=arr[j++];
                }
            }
            while(i<=mid){
                temp[t++] = arr[i++];
            }
            while(j<=right){
                temp[t++] = arr[j++];
            }
            t=0;
            while(left<=right){
                arr[left++]=temp[t++];
            }
        }
    
        public static int binSearch(int[] nums,int low,int high,int key){
            if(low<=high){
                int mid = low+(high-low)/2;
                if(nums[mid]==key){
                    return mid;
                }else if(nums[mid]>key){
                    return binSearch(nums, low, mid-1, key);
                }else{
                    return binSearch(nums, mid+1, high, key);
                }
            }
            return -1;
        }
    
        public static int commonBinSerach(int[] nums,int key){
            int low = 0;
            int high = nums.length-1;
            int middle = 0;
            while(low<=high){
                middle=(low+high)/2;
                if(nums[middle]>key){
                    high=middle-1;
                }else if(nums[middle]<key){
                    low=middle+1;
                }else{
                    return middle;
                }
            }
            return -1;
        }
    
        public static void main(String[] args) {
            int[] nums = {4,5,9,8,7,3,6,1,2,0};
            System.out.println("
    "+"original:");
            for(int i=0;i<nums.length;i++){
                System.out.print(nums[i]+" ");
            }
            System.out.println("
    ");
            //bubbleSort(nums);
            //selectSort(nums);
            //insertSort(nums);
            //shellSort(nums);        
            //quickSort(nums);
            //mergeSort(nums);
    
            System.out.println("
    please input a num of array:");
            Scanner input = new Scanner(System.in);
            int x = input.nextInt();
            System.out.println("position: "+commonBinSerach(nums,x));
            System.out.println("the position of "+x+" is: "+binSearch(nums, 0, nums.length-1, x));
            input.close();
            
        }
    }
  • 相关阅读:
    赋值、浅拷贝以及深拷贝的区别
    Python实现工厂模式
    Python实现代理模式
    select监听udp消息
    awk词频统计
    Python正则的贪婪和非贪婪示例
    js配置文件不缓存
    jquery事件命名空间和css-attr()
    iso移动Safari页面缓存
    javaWeb禁止http不安全请求方式
  • 原文地址:https://www.cnblogs.com/liesun/p/9357196.html
Copyright © 2011-2022 走看看