码迷,mamicode.com
首页 > 编程语言 > 详细

一些常见的排序算法

时间:2018-12-07 20:51:17      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:开头   学习   排序   oid   常见   new   选择   sort   说明   

  • 博主做的是关于Unity游戏方面的,虽然平时都没有用过这些排序算法,但还是很有必要学习一下。今天想温故一下,总结一下才能更好的进行下一步的学习。

一、冒泡排序

  冒泡排序是一个特别简单的排序算法,代码也很容易实现。我总结起来就是:遍历数组n(数组的长度)次:每次与它下一个元素比较,如果这个元素比它下一个元素小,就交换这两个元素。可以发现,如果遍历一次数组的话可以得到数组的最大值或最小值。

一次遍历数组的结果:

技术分享图片

 

经过多次遍历后:

技术分享图片

源码:

import java.util.Arrays;

public class BubbleSort {

    /**
     * 遍历数组,每次与它下一个元素比较,如果这个元素比它下一个元素小,就交换这两个元素.
     * @param arr
     */
    void sort(int[] arr) {

        for(int j = 0; j < arr.length - 1; j ++) {
            for(int i = 0; i < arr.length - 1; i++) {
                if(arr[i] < arr[i + 1] ) {
                    swap(arr, i, i + 1);
                }
            }
        }
    }
    
    /**
     * 交换数组的元素
     * @param arr
     * @param a
     * @param b
     */
    void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp; 
    }
    
    public static void main(String[] args) {
        int[] array = {4, 1, 7, 23, 0};
        BubbleSort bSort = new BubbleSort();
        bSort.sort(array);
        System.out.println(Arrays.toString(array));
    }
}

虽然排序正常了,但是不够好。因为在已经排序好的元素不需要再重新遍历了,所以我针对sort()方法优化一下:

    void sort(int[] arr) {

        for(int j = 0; j < arr.length - 1; j ++) {
            //已经排序好的就不用再去遍历了
            for(int i = 0; i < arr.length - j - 1; i++) {
                if(arr[i] < arr[i + 1] ) {
                    swap(arr, i, i + 1);
                }
            }
        }
    }

 

 

二、选择排序

选择排序将一个数组分为两个部分,一部分是已经排序的序列,另一部分是未排序的序列。而排序都是将未排序的序列中找到一个最小的元素放到已排序的开头。我感觉还是用图来说明会更容易理解。

技术分享图片

技术分享图片

每次遍历未排序的序列都会从其中找到一个最小的元素,然后归入已排序的序列中

源码:

import java.util.Arrays;

public class SelectionSort {
    
    /**
     * 从arr数组下标为min的元素开始向后依次比较:若有元素比arr[min]小,交换这两个值
     * @param arr
     * @param min    作为比较较小值的索引下标
     */
    void sort(int[] arr, int min) {
        for(int i = min + 1; i  < arr.length; i++) {
            if(arr[min] > arr[i] ) {
                swap(arr, min, i);
            }
        }
    }
    
    void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp; 
    }
    
    public static void main(String[] args) {
        int arr[] = { 6, 10, 7, 3, 9, 1, 5 };
        SelectionSort cs = new SelectionSort();
        for(int i = 0; i < arr.length; i++) {
            cs.sort(arr, i);
        }
        System.out.println(Arrays.toString(arr));
    }
}

 

 

本想一次性将剩下两个排序算法一起写完,发现将那两个算法写成博客比较麻烦,下次来完成

一些常见的排序算法

标签:开头   学习   排序   oid   常见   new   选择   sort   说明   

原文地址:https://www.cnblogs.com/CCLi/p/10084129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!