博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现几种排序
阅读量:7021 次
发布时间:2019-06-28

本文共 3790 字,大约阅读时间需要 12 分钟。

一、冒泡排序

    冒泡排序是一种简单的排序算法。它重复的走访过要排序的数列,一次比较两个元素,如果它们顺序错误就把他们交换过来。

二、快速排序

   使用分治策略把一个序列分成两个子序列。

此外还有选择、插入、归并排序。代码如下:

代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package test.sort;   import java.util.Random;   //Java实现的排序类  public class NumberSort {       //私有构造方法,禁止实例化      private NumberSort() {           super();       }        //冒泡法排序     public static void bubbleSort(int[] numbers) {           int temp; // 记录临时中间值           int size = numbers.length; // 数组大小           for (int i = 0; i < size - 1; i++) {               for (int j = i + 1; j < size; j++) {                   if (numbers[i] < numbers[j]) { // 交换两数的位置                       temp = numbers[i];                       numbers[i] = numbers[j];                       numbers[j] = temp;                   }               }           }       }       //快速排序    public static void quickSort(int[] numbers, int start, int end) {           if (start < end) {               int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)               int temp; // 记录临时中间值               int i = 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);           }       }       //选择排序     public static void selectSort(int[] numbers) {           int size = numbers.length, temp;           for (int i = 0; i < size; i++) {               int k = i;               for (int j = size - 1; j > i; j--) {                   if (numbers[j] < numbers[k])                       k = j;               }               temp = numbers[i];               numbers[i] = numbers[k];               numbers[k] = temp;           }       }       //插入排序        // @param numbers      public static void insertSort(int[] numbers) {           int size = numbers.length, temp, j;           for (int i = 1; i < size; i++) {               temp = numbers[i];               for (j = i; j > 0 && temp < numbers[j - 1]; j--)                   numbers[j] = numbers[j - 1];               numbers[j] = temp;           }       }       //归并排序      public static void mergeSort(int[] numbers, int left, int right) {           int t = 1;// 每组元素个数           int size = right - left + 1;           while (t < size) {               int s = t;// 本次循环每组元素个数               t = 2 * s;               int i = 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);           }       }        //归并算法实现      private static void merge(int[] data, int p, int q, int r) {           int[] B = new int[data.length];           int s = p;           int t = q + 1;           int k = 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 (int i = p; i <= r; i++)               data[i] = B[i];       }     }

 

转载于:https://www.cnblogs.com/linzhijie45/p/6099384.html

你可能感兴趣的文章
uvm_hdl——DPI在UVM中的实现(四)
查看>>
as和handle交互(json)
查看>>
[POJ1155]TELE(树形背包dp)
查看>>
查找表索引
查看>>
ctf--php
查看>>
leetcode921
查看>>
leetcode1003
查看>>
MYSQL的启动
查看>>
leetcode--589. N叉树的前序遍历 非递归实现
查看>>
AC自动机+高斯消元 hdu 5955 Guessing the Dice Roll 16沈阳icpc
查看>>
Visual2010解决方案单个项目的执行
查看>>
九九乘法表:使用"类名.方法名" 调用静态方法
查看>>
Linux命令学习笔记
查看>>
循环链表
查看>>
(一)mybatis简易搭建
查看>>
接口 与 抽象类
查看>>
写出好简历吧
查看>>
Android IOS WebRTC 音视频开发总结(七六)-- 探讨直播低延迟低流量的粉丝连麦技术...
查看>>
AC日记——[USACO1.1]坏掉的项链Broken Necklace 洛谷 P1203
查看>>
常用类的课后作业
查看>>