• Java排序算法


       排序算法动态演示:http://www.atool.org/sort.php

     

    插冒快选n2,堆排归并nlog2n,基数排序d(n+r)

    1.插入排序

      ■ 直接插入排序:

    public class Insert {
        public static void main(String[] args) {
            int[] a = { 13, 22, 15, 7, 41, 24 };
            insertSort(a);
            System.out.println(Arrays.toString(a));
        }
        private static void insertSort(int[] a) {
            for (int i = 1; i < a.length; i++) {
                int j = 0;
                int temp = a[i];
                for (j = i - 1; j >= 0 && temp < a[j]; j--) {
                    a[j + 1] = a[j];
                }
                a[j + 1] = temp;
            }
        }
    }

      ■ 希尔排序:

    public class Shell {
        public static void main(String[] args) {
            int[] a = { 2, 15, 6, 12, 32, 41 };
            shellSort(a);
            System.out.println(Arrays.toString(a));
        }
        private static void shellSort(int[] a) {
            int temp;
            for (int i = a.length / 2; i > 0; i = i / 2) {
                for (int j = i; j < a.length; j++) {
                    if (a[j - i] > a[j]) {
                        temp = a[j - i];
                        a[j - i] = a[j];
                        a[j] = temp;
                    }
                }
            }
        }
    }

    2.选择排序

      ■ 简单选择排序:

    public class SimpleSelect {
        public static void main(String[] args) {
            int[] a = {2, 15, 6, 12, 32, 41};
            simpleSelectSort(a);
            System.out.println(Arrays.toString(a));
        }
        private static void simpleSelectSort(int[] arr){
            int position=0;//剩余最小值所在的位置
            for (int i = 0; i < arr.length; i++) {
                position=i;
                int temp=arr[i];
                for (int j=i+1; j < arr.length; j++) {
                    if(arr[j]<temp){
                        temp=arr[j];
                        position=j;
                    }
                }
                arr[position]=arr[i];
                arr[i]=temp;
            }
        }
    }

      ■ 堆排序:

    public class HeapSort {
        public static void main(String[] args) {
            int a[] = {49,36,65,79,13,27,78,34,12,64,5,4,62,99,98};
            heapSort(a);
            System.out.println(Arrays.toString(a));
        }
        
        public static void heapSort(int[] a){
            for (int i = 0; i < a.length-1; i++) {
                buildMaxHeap(a,a.length-1-i);
                swap(a,0,a.length-1-i);
            }
        }
        //两两交换位置
        public static void swap(int[] a,int i,int j){
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
        public static void buildMaxHeap(int[] a,int lastIndex){
            for (int i = (lastIndex-1)/2; i >=0; i--) {
                int k=i;
                while(k*2+1<=lastIndex){
                    int biggerIndex=k*2+1;
                    if(biggerIndex<lastIndex){
                        if(a[biggerIndex]<a[biggerIndex+1])
                            biggerIndex++;
                    }
                    if(a[k]<a[biggerIndex]){
                        swap(a,k,biggerIndex);
                        k=biggerIndex;
                    }else{
                        break;
                    }
                }
            }
        }
    }

    3.交换排序

      ■ 冒泡排序:

    public class Bubble {
        public static void main(String[] args) {
            int[] a = { 62, 54, 68, 73, 99, 46, 83, 22, 70 };
            bubbleSort(a);
            System.out.println(Arrays.toString(a));
        }
        private static void bubbleSort(int[] a) {
            int temp = 0;
            for (int i = 0; i < a.length - 1; i++) {
                for (int j = 0; j < a.length - i - 1; j++) {
                    if (a[j] > a[j + 1]) {
                        temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
        }
    }

      ■ 快速排序:

    public class QuickSort {
        public static void main(String[] args) {
            int[] arr ={2,1,3,4,7,9,8,6,5};
            arr = quickSort(arr,0,arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
        public static void swap(int[] arr,int i,int j){
            int temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        public static int[] quickSort(int[] arr,int low,int high){
            if(low >= high)
                return arr;
            if(high-low == 1){
                if(arr[0]>arr[1])
                    swap(arr,0,1);
                return arr;
            }
            int pivot = arr[low];
            int left = low+1;
            int right = high;
            while(left<right){
                while(left<right && left<=high){
                    if(arr[left]>pivot)
                        break;
                    left++;
                }
                while(left<=right && right>low){
                    if(arr[right]<=pivot)
                        break;
                    right--;
                }
                if(left<right)
                    swap(arr,right,left);
            }
            swap(arr,low,right);
            quickSort(arr,low,right);
            quickSort(arr,right+1,high);
            return arr;
        }
    }
  • 相关阅读:
    XPath在python中的高级应用
    Python中 sys.argv[]的用法简明解释
    python format
    爬虫解析:XPath总结
    c#attribute特性
    .net随笔--不好归类的
    windows系统操作
    linux学习
    visual studio各种新建项目和新建项简介
    自定义界面和控件--基础
  • 原文地址:https://www.cnblogs.com/lxcmyf/p/5661712.html
Copyright © 2020-2023  润新知