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

Posted 巅峰小学生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序选择排序插入排序相关的知识,希望对你有一定的参考价值。



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"); 
        }
    }
    
}


以上是关于冒泡排序选择排序插入排序的主要内容,如果未能解决你的问题,请参考以下文章

三大基础排序算法(冒泡排序,选择排序,插入排序)

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)

JavaScript算法(冒泡排序选择排序与插入排序)

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚