zoukankan      html  css  js  c++  java
  • 常见的排序算法模板

    冒泡排序

    public void sorts(int[] a) {
        for(int i=0;i<a.length;i++){
            boolean flag=false;
            for(int j=0;j<a.length-1-i;j++){
                if(a[j]>a[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    flag=true;
                }
            }
            if(!flag){
                break;
            }
        }
    }
    

    选择排序

    public void sorts(int[] a) {
        for(int i=0;i<a.length-1;i++){
            int minIndex=i;
            for(int j=i+1;j<a.length;j++){
                if(a[minIndex]>a[j]){
                    minIndex=j;
                }
            }
            int temp=a[i];
            a[i]=a[minIndex];
            a[minIndex]=temp;
        }
    }
    

    插入排序

    public void sorts(int[] a) {
        for(int i=1;i<a.length;i++){
            int cur=a[i];
            int preIndex=i-1;
            while(preIndex>=0 && a[preIndex]>cur){
                a[preIndex+1]=a[preIndex];
                preIndex--;
            }
            a[preIndex+1]=cur;
        }
    }
    

    快速排序

    public void sort(int[] nums,int left,int right){
        if(left>=right){
            return;
        }
        int low=left+1,high=right;
        while(low<=high){
            if(nums[low]<=nums[left]){
                low++;
            }else{
                swap(nums,low,high--);
            }
        }
        swap(nums,left,--low);
        sort(nums,left,low-1);
        sort(nums,low+1,right);
    }
    public void swap(int[] nums,int x,int y){
        int temp=nums[x];
        nums[x]=nums[y];
        nums[y]=temp;
    }
    

    归并排序

    public void sort(int[] nums,int left,int right,int[] temp){
        if(left>=right){
            return;
        }
        int mid=left+(right-left)/2;
        sort(nums,left,mid,temp);
        sort(nums,mid+1,right,temp);
        merge(nums,left,mid,right,temp);
    }
    public void merge(int[] nums,int left,int mid,int right,int[] temp){
        int i=left,j=mid+1,low=left;
        while(i<=mid && j<=right){
            if(nums[i]<=nums[j]){
                temp[left++]=nums[i++];
            }else{
                temp[left++]=nums[j++];
            }
        }
        while(i<=mid){
            temp[left++]=nums[i++];
        }
        while(j<=right){
            temp[left++]=nums[j++];
        }
        for(int k=low;k<=right;k++){
            nums[k]=temp[k];
        }
    }
    

    堆排序

    public void sort(int[] nums){
        if(nums==null || nums.length==0){
            return;
        }
        for(int i=(nums.length-2)/2;i>=0;i--){//从最后一个非叶子结点开始建堆
            adjustHeap(nums,i,nums.length-1);
        }
        for(int i=nums.length-1;i>=0;i--){//将最大的元素放在最后,减小堆的规模,重新调整堆,将最大元素放在顶部
            swap(nums,0,i);
            adjustHeap(nums,0,i-1);
        }
    }
    public void adjustHeap(int[] nums,int curIndex,int end){
        while(2*curIndex+1<=end){//左子节点是否在范围内
            int son=2*curIndex+1;
            if(son+1<=end && nums[son]<nums[son+1]){//找到最大的子结点
                son++;
            }
            if(nums[curIndex]<nums[son]){//与最大的子结点互换元素
                swap(nums,curIndex,son);
            }
            curIndex=son;//当前结点指针转到子结点
        }
    }
    public void swap(int[] nums,int x,int y){
        int temp=nums[x];
        nums[x]=nums[y];
        nums[y]=temp;
    }
    
  • 相关阅读:
    点击子窗体给父窗体上的对象赋值
    框架使用及规范参考
    像Google日历一样的日程管理
    TreeView 和 Menu 的用法
    甘特图-svg版 支持客户端事件
    js获取DropDownList的选择项
    GridView,Repeater分页控件:WebPager(开源)
    TextBox 禁止客户端输入 前台通过JS赋值 并在后台获取
    对象实体 参考标准
    以编程方式控制ScriptManager
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14408364.html
Copyright © 2011-2022 走看看