用Java语言实现五种常用排序

原创 2016年11月03日 22:41:32

一、选择排序法

选择排序法的思想在于先遍历一次数组(集合)(第一次是0-a.length,第二次是从1-a.length),在遍历的过程中,前一个元素与后一个元素进行比较,如果前一个元素大于后一个,则记录后一个元素的索引(记为min),并将这两个数进行交换,接着a[min]与下一个元素比较,如果后者小于前者,则将后者下标记录,并交换,以此类推。这样第一次遍历结束后,a[0]位置元素就是这个集合中最小的元素。第二次遍历结束后a[1]就是这个数组中第二小元素,以此类推。总共进行了(a.length-2)次的遍历,

// 选择排序
private static void select_sort(int a[]) {

    int i, j, t, min;**重点内容**
    for (i = 0; i < a.length - 1; i++) {
        min = i;
        for (j = i + 1; j < a.length; j++) {
            if (a[min] > a[j])
                min = j;
            }
            if (min != i) {
                t = a[min];
                a[min] = a[i];
                a[i] = t;
        }
    }
}

二、冒泡排序法

冒泡排序法与选择排序法极其相似,区别在于,选择排序是从前往后排序,而冒泡是从后往前排序。他是在一次遍历中前一个与后一个比较,如果后者小于前者,则将前者向后移一位,这样的逐次的前后比较移位,就会将最大一个元素移到数组的最末尾,第二次遍历比较移位就会将数组中第二小的元素移位到倒数第二的位置,以此下去,数组中的元素就按升序排好了。

// 冒泡排序法
private static void bubble_sort(int a[]) {

    int i, j, t;
    for (i = 0; i < a.length - 1; i++) {
        for (j = 0; j < a.length - 1 - i; j++) {
            if (a[j] > a[j + 1]) {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
}

三、二分法排序
二分法排序是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到start>end,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。该方法也是一种从前往后的排序。

// 二分法
private static void half_sort(int a[]) {

    int i, j, start, end, mid, t;
    for (i = 0; i < a.length; i++) {

        start = 0;
        end = i - 1;
        mid = 0;
        t = a[i];
        while (start <= end) {

            mid = (start + end) / 2;
            if (a[mid] > t) { // 要排序元素在已经排过序的数组左边
                end = mid - 1;
            } else {
                start = mid + 1;
            }

        }
        for (j = i - 1; j > end; j--) {// 找到了要插入的位置,然后将这个位置以后的所有元素向后移动
            a[j + 1] = a[j];
        }
        a[end + 1] = t;
    }

}

四、快速排序法
快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
// 快速排序(两端交替着想中间扫描)
private static void quick_sort(int a[], int low, int high) {

    int pivotkey = a[low];
    int i = low, j = high;
    if (low >= high)
        return;

    while (i < j) {
        while (i < j && a[j] >= pivotkey)
            j--;
        a[i] = a[j];
        while (i < j && a[i] <= pivotkey)
            i++;
        a[j] = a[i];
    }
    a[i] = pivotkey;
    quick_sort(a, low, i - 1);
    quick_sort(a, i + 1, high);

}

五、插入排序法
从第二个数开始,先将第二个数做一个基准。
第二个数同前一个数比较,小于则用前一个数覆盖第二个数, 然后将副本放在前一个数前面
再将第三个数做一个副本取出,第三个数同前一个数比较,小于则用前一个数覆盖第三个数(此时第二个数位置空闲), 然后用副本同前一个数的前一个数比较,如果小于,则用前一个数的前一个数覆盖在原本的第二个位置上(此时第一个位置空闲), 将副本放入即可。
4.将数组中接下来的数依次做与3类似步骤,以3类推将副本往前作比较。直到副本不小于比较的数则该轮插入结束
5.重复4步骤,直到最后一个数

//插入排序法
private static  void insert_sort(int a[]) {
    for (int j = 1; j < a.length; j++) {
        int key = a[j];
        int i = j - 1;
        while (i >= 0 && a[i] > key) {
            a[i + 1] = a[i];
            i = i - 1;
        }
        a[i + 1] = key;
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java语言实现五种常用的算法的应用举例

用动态规划法解决最大子段和问题 二、实验目的:        课程设计是《算法分析与设计》课程不可缺少的重要实践性环节。通过实践教学,要达到以下目的: (1)使学生掌握动态规划法思想 (2...

常用排序算法Java语言实现

冒泡排序算法原理: 1.比较相邻的元素。 如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。 ...

java语言实现常用算法(排序和查找)

以下是java语言实现的常用算法: 1.冒泡排序package com.test.sort; /* * 冒泡排序 * * 有1至N个数 * 第一轮比较N个数,第二轮比较N-1个数,... ...
  • hlzgood
  • hlzgood
  • 2015年05月02日 21:10
  • 192

选择排序Java语言实现

  • 2016年04月19日 09:56
  • 10KB
  • 下载

Java语言实现六种排序算法

  • 2016年07月15日 11:55
  • 2KB
  • 下载

Java语言实现六种排序算法

Java语言实现六种排序算法Java语言实现六种排序算法冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序C语言版点此穿越冒泡排序从左到右依次比较相邻两个元素,如果大的在左边则交换这两个元素。...

算法入门---java语言实现的归并排序小结

package com.android.algriothm;/** * 归并排序 基本思想:将一个无序的集合,一半一半的递归的分成好几个有序的子集合(最终分成只有一个元素,那么也就相当于是有序了), ...

算法入门---java语言实现的插入排序小结

public class InsertSort { /** *你想啊,每个的前面都是比它小的,这样的组合肯定是有序的啊,细分到最小,每一个都需要遵守规则, * 这样就保证了前面的...

冒泡排序Java语言实现及其优化

冒泡排序性能数据: package com.shan.bubbleSort;/** * * @author shan * 冒泡排序算法:需要便利几次数组,在每次遍历中,比较相邻的元素。如果某...
  • stuShan
  • stuShan
  • 2015年10月14日 22:49
  • 410

四种经典排序算法总结,自己Java语言实现

选择排序 冒泡排序 插入排序 快速排序
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Java语言实现五种常用排序
举报原因:
原因补充:

(最多只允许输入30个字)