常见排序算法整理(一)----冒泡排序、直接插入排序

来源:互联网 发布:简述js的事件委托 编辑:程序博客网 时间:2024/06/07 20:07

这几天趁着放假有时间,把几种常见的排序算法整理下,本次整理主要是根据http://blog.csdn.net/u012501459/article/details/44594719所写排序算法为基础,加上自己的一些理解,整理所得,下面介绍两种排序算法,冒泡排序,直接插入排序。

冒泡排序

冒泡排序,顾名思义,就是将数据按照一定顺序,像气泡一样一个一个冒上来,最后数据就会从小到大或从大到小排列,下面是java代码:

public class BubbleSort {    public static void main(String[] args) {        int[] data = {2,5,9,6,3,4,7,1,5}; //测试数据        myBubble(data);//冒泡排序        //打印数组        for(int i = 0;i<data.length;i++) {            System.out.print(data[i]+" ");                  }    }    public static void myBubble(int[] data ) {        /**         * 第一个for循环只是轮次,并不控制数据交换         * 一个长度为n的数组,只需要n-1次循环即可         * 每次循环都会将最大(最小)的数移到最后,         * 当只剩下最后一个数时,就不需要循环         */        for(int i = 1;i < data.length;i++) {            /**             * 第二个for循环用于数组中的数据数据交换             * 其中j必须小于(数组长度-1),因为后面有一个             * 取出数组j+1位置的操作             * 每次循环之后,最后面的数据顺序都是排好了的             * 所以每次循环次数只需要循环(数组长度-循环次数)             * 这么多次             */            for (int j = 0;j<data.length-i;j++) {                if (data[j]>data[j+1]) {                    int temp = data[j];                    data[j]=data[j+1];                    data[j+1]=temp;                }            }        }    }}

结果如下:
排序算法结果

直接插入排序

直接插入排序:基本思想就是从一个无序数组中取出数据插入一个有序数组,每次插入时,都会遍历有序数组,在合适位置插入。在实际排序过程中可以将一个无序的数组arr[n]看成两个部分,循环轮次为i,其初值为1,arr[i-1]为有序数组,arr[i]之后为无序数组,每次循环都会将arr[i],插入到前面的有序数组,插入时会遍历前面的有序数组,在合适地方插入。下面是代码,排列顺序从小到大:

public class InsertSort {    public static void main(String[] args) {        int[] data = {2,5,9,6,3,4,7,1,5,8,11,44,33,9,51}; //测试数据        myInsert(data);//插入排序        //打印数组        for(int m = 0;m<data.length;m++) {            System.out.print(data[m]+" ");                  }    }    public static void myInsert(int[] data) {        /**         * 这里i表示待插入的元素位置,一个数组data[]中         * 可以将其看成两个部分,data[i]之前的部分为有序数组         * 之后的为无序数组,data[i]就可看成无序数组中的第一个元素         * 准备插入有序数组中         */        for(int i = 1;i<data.length;i++) {            /**             * 该循环用于遍历前面的有序数组,该数组长度为i             */            for(int j = 0;j<i;j++) {                //从data[0]开始循环,判断有序数组中的值是否大于data[i]                //如果是,就需要在该位置插入数据,剩下的数据将后移                if (data[j]>data[i]) {                    int temp = data[i];//用一个临时变量保存待插入的数据data[i]                    /*                     * 该循环用于将有序数组中的数据后移                     * 其移动位置是从data[j]~~data[n-1]                     * 移动到data[j+1]~~data[n]                     * 然后在data[j]处插入data(保存data[i]的临时变量)                     */                    for(int k = i;k>j;k--) {                        data[k] = data[k-1];                    }                    data[j] = temp;//插入数据                    break;//因为插入的是有序数列,插入完成后仍然为有序,就可以跳出该循环,开始下一个数据插入                }            }        }    }}

结果如下:
直接插入排序结果

阅读全文
0 0
原创粉丝点击