数组排序

/**
* 冒泡法排序
*比较相邻的元素。如果第一个比第二个大,就交换他们两个。
*对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
*针对所有的元素重复以上的步骤,除了最后一个。
*持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*@paramnumbers 需要排序的整型数组*/

public static voidbubbleSort(int[] numbers) {
inttemp;// 记录临时中间值
intsize = numbers.length;// 数组大小
for(inti =0; i < size -1; i++) {
for(intj = i +1; j < size; j++) {
if(numbers[i] < numbers[j]) {// 交换两数的位置

temp = numbers[i];

numbers[i] = numbers[j];

numbers[j] = temp;

}

}

}

}

/**

* 快速排序

*

    *

    从数列中挑出一个元素,称为“基准”

    *

    重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,

    * 该基准是它的最后位置。这个称为分割(partition)操作。

    *

    递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

    *

    *

    *@paramnumbers

    *@paramstart

    *@paramend

    */

    public static voidquickSort(int[] numbers,intstart,intend) {

    if(start < end) {

    intbase = numbers[start];// 选定的基准值(第一个数值作为基准值)

    inttemp;// 记录临时中间值

    inti = start, j = end;

    do{

    while((numbers[i] < base) && (i < end))

    i++;

    while((numbers[j] > base) && (j > start))

    j--;

    if(i <= j) {

    temp = numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

    i++;

    j--;

    }

    }while(i <= j);

    if(start < j)

    quickSort(numbers, start, j);

    if(end > i)

    quickSort(numbers, i, end);

    }

    }

    /**

    * 选择排序

    *

    在未排序序列中找到最小元素,存放到排序序列的起始位置

    *

    再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。

    *

    以此类推,直到所有元素均排序完毕。

    *

    *@paramnumbers

    */

    public static voidselectSort(int[] numbers) {

    intsize = numbers.length, temp;

    for(inti =0; i < size; i++) {

    intk = i;

    for(intj = size -1; j >i; j--)  {

    if(numbers[j] < numbers[k])  k = j;

    }

    temp = numbers[i];

    numbers[i] = numbers[k];

    numbers[k] = temp;

    }

    }

    /**

    * 插入排序

    *

      *

      从第一个元素开始,该元素可以认为已经被排序

      *

      取出下一个元素,在已经排序的元素序列中从后向前扫描

      *

      如果该元素(已排序)大于新元素,将该元素移到下一位置

      *

      重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

      *

      将新元素插入到该位置中

      *

      重复步骤2

      *

      *

      *@paramnumbers

      */

      public static voidinsertSort(int[] numbers) {

      intsize = numbers.length, temp, j;

      for(inti=1; i

      temp = numbers[i];

      for(j = i; j >0&& temp < numbers[j-1]; j--)

      numbers[j] = numbers[j-1];

      numbers[j] = temp;

      }

      }

      /**

      * 归并排序

      *

        *

        申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

        *

        设定两个指针,最初位置分别为两个已经排序序列的起始位置

        *

        比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

        *

        重复步骤3直到某一指针达到序列尾

        *

        将另一序列剩下的所有元素直接复制到合并序列尾

        *

        *

        *@paramnumbers

        */

        public static voidmergeSort(int[] numbers,intleft,intright) {

        intt =1;// 每组元素个数

        intsize = right - left +1;

        while(t < size) {

        ints = t;// 本次循环每组元素个数

        t =2* s;

        inti = left;

        while(i + (t -1) < size) {

        merge(numbers, i, i + (s -1), i + (t -1));

        i += t;

        }

        if(i + (s -1) < right)

        merge(numbers, i, i + (s -1), right);

        }

        }

        /**

        * 归并算法实现

        *

        *@paramdata

        *@paramp

        *@paramq

        *@paramr

        */

        private static voidmerge(int[] data,intp,intq,intr) {

        int[] B =new int[data.length];

        ints = p;

        intt = q +1;

        intk = p;

        while(s <= q && t <= r) {

        if(data[s] <= data[t]) {

        B[k] = data[s];

        s++;

        }else{

        B[k] = data[t];

        t++;

        }

        k++;

        }

        if(s == q +1)

        B[k++] = data[t++];

        else

        B[k++] = data[s++];

        for(inti = p; i <= r; i++)

        data[i] = B[i];

        }

        最后编辑于
        ©著作权归作者所有,转载或内容合作请联系作者
        • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
          沈念sama阅读 204,293评论 6 478
        • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
          沈念sama阅读 85,604评论 2 381
        • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
          开封第一讲书人阅读 150,958评论 0 337
        • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
          开封第一讲书人阅读 54,729评论 1 277
        • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
          茶点故事阅读 63,719评论 5 366
        • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
          开封第一讲书人阅读 48,630评论 1 281
        • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
          沈念sama阅读 38,000评论 3 397
        • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
          开封第一讲书人阅读 36,665评论 0 258
        • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
          沈念sama阅读 40,909评论 1 299
        • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
          茶点故事阅读 35,646评论 2 321
        • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
          茶点故事阅读 37,726评论 1 330
        • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
          沈念sama阅读 33,400评论 4 321
        • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
          茶点故事阅读 38,986评论 3 307
        • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
          开封第一讲书人阅读 29,959评论 0 19
        • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
          开封第一讲书人阅读 31,197评论 1 260
        • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
          沈念sama阅读 44,996评论 2 349
        • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
          茶点故事阅读 42,481评论 2 342

        推荐阅读更多精彩内容

        • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
          蚁前阅读 5,164评论 0 52
        • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
          每天刷两次牙阅读 3,727评论 0 15
        • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
          依依玖玥阅读 1,235评论 0 2
        • 数组排序在日常编程中用到的其实还是比较多的,比如把一组数据按时间排序,按首字母排序,按大小排序等等,那么就让我们一...
          一木_qintb阅读 12,780评论 1 2
        • 数组排序在日常编程中用到的其实还是比较多的,比如把一组数据按时间排序,按首字母排序,按大小排序等等,那么就让我们一...
          xueNoble阅读 2,170评论 0 9