首页 > 编程语言 > 详细

冒泡排序、选择排序、插入排序

时间:2018-03-25 16:34:37      阅读:182      评论:0      收藏:0      [点我收藏+]


public class MySort {
    
    
    
    /**
     * 插入排序(小到大)
     * @param arr
     * @return
     */
    public int[] insertSort(int[] arr) {

        
        for (int i = 1; i < arr.length; i++) {
            
            int copyNum = arr[ i ]; 
            int targetIndex = i;    

            /*
             * copyNumIndex>0看的是现在这个copyNumIndex是否已经越界了
             * copyNum<arr[copyNumIndex-1])看复制出来的这个数是否小于本身前面的那个数
             * 都满足,则证明没有还没找到插入的位置
             */
            while (targetIndex>0 && copyNum<arr[ targetIndex - 1 ] ) {
                
                arr[ targetIndex ] = arr[ targetIndex - 1 ]; //让前面的那个数替换掉copyNum的本体
                targetIndex--;
            }

            arr[ targetIndex ] = copyNum;
        }

        return arr;

    }
    

    
    
    /**
     * 选择排序
     * @param arr
     * @return
     */
    public int[] selectSort(int[] arr) {
        
        for(int i=0; i<arr.length-1; i++) {
            
            //假设最小值
            int min = arr[i];
            int minIndex = i;
            
            for(int j=i+1; j<arr.length; j++) {
                
                if(min > arr[j]) {
                    min = arr[j];
                    minIndex = j;
                }
            }
            
            //如果循环过后没有变则跳过(减少交换操作)
            if(min == arr[i])
                continue;
            
            
            swap(arr, i, minIndex);
            
        }
        
        
        return arr;
        
    }

    
    /**
     * 冒泡排序
     * @param arr
     * @return
     */
    public int[] bubbleSort(int[] arr) {

        //控制次数
        for(int i=0; i<arr.length-1; i++) {
            
            for(int j=0; j<arr.length-(i+1); j++) {
                
                if(arr[j] > arr[j+1]) {
                    swap(arr, j, j+1);
                }
            }
        }
        
        return arr;
    }
    
    /**
     * 数值交换
     * @param arr
     * @param a 数组下标
     * @param b 数组下标
     */
    private void swap(int[] arr, int a, int b) {
        
        int temp = arr[b];
        arr[b] = arr[a];
        arr[a] = temp;
        
    }
    
    
    /**
     * 打印数据
     * @param arr
     */
    public void printArray(int[] arr) {
        for (int i : arr) {
            System.out.print(i + "\t"); 
        }
    }
    
}


冒泡排序、选择排序、插入排序

原文:https://www.cnblogs.com/tandi19960505/p/8645262.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!