`
henxingliwang
  • 浏览: 11402 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

常用的排序方法

阅读更多

package com.util;

/**
 * 常用的排序方法 排序算法的分类如下: 1.插入排序法(直接插入排序法、折半插入排序法、希尔排序法) 2.交换排序法(冒泡排序法、快速排序法)
 * 3.选择排序法(直接选择排序法、堆排序法) 4.归并排序法 5.基数排序法 关于排序方法的选择:
 * (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
 * 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
 * (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
 * (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
 *
 * @author LW
 */
public class Sort {

 public static final int ASC = 0;// 正序
 public static final int DESC = 1;// 倒序

 /**
  * 交换数据中指定两元素的位置
  *
  * @param data
  * @param x
  * @param y
  */
 private static void swap(int[] data, int x, int y) {
  int temp = data[x];
  data[x] = data[y];
  data[y] = temp;
 }

 /**
  * 插入排序的基本思想为:首先寻找一个有序数列,然后将数组中的每个元素插入到该有序序列中,
  * 则该数组序列即可变为有序数列。具体实施办法为,首选将第一个元素看作是一个有序序列,然后
  * 从第二个元素开始遍历数组,将每个元素插入到从第一个元素到前一个元素的有序序列中,即可完 成排序。
  *
  * @param temp
  */
 public static void insertSort(int[] data) {
  for (int i = 1; i < data.length; i++) {
   int temp = data[i];
   int j = i - 1;
   while (j >= 0 && temp < data[j]) {
    data[j + 1] = data[j];
    j--;
   }
   data[j + 1] = temp;
  }
 }

 /**
  * 折半插入排序算法的java实现
  *
  * @param temp
  */
 public static void bInsertSort(int[] data) {
  int length = data.length;
  for (int i = 1; i < length; i++) {
   int temp = data[i];
   int low = 0;
   int high = i - 1;
   while (low <= high) {
    int middle = (low + high) / 2;
    if (temp < data[middle])
     high = middle - 1;
    else
     low = middle + 1;
   }
   for (int j = i; j > high + 1; j--) {
    data[j] = data[j - 1];
   }
   data[high + 1] = temp;
  }
 }

 /**
  *
  * 冒泡排序----交换排序的一种
  *
  * 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。
  * 性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4
  *
  * @param data
  *            要排序的数组
  * @param sortType
  *            排序类型 ASC、DESC
  * @return
  *
  */
 public static void bubbleSort(int[] data, int sortType) {
  if (sortType == ASC) {
   for (int i = 1; i < data.length; i++) {
    for (int j = 0; j < data.length - i; j++) {
     if (data[j] > data[j + 1]) {
      swap(data, j, j + 1);
     }
    }
   }
  } else if (sortType == DESC) {
   for (int i = 1; i < data.length; i++) {
    for (int j = 0; j < data.length - i; j++) {
     if (data[j] < data[j + 1]) {
      swap(data, j, j + 1);
     }
    }
   }
  }
 }

 /**
  *
  * 直接选择排序法----选择排序的一种
  *
  * 方法:每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
  * 性能:比较次数O(n^2),n^2/2 交换次数O(n),n
  * 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。
  * 但是N比较大时,比较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。
  *
  * @param data
  *            要排序的数组
  * @param sortType
  *            排序类型
  * @return
  *
  */
 public static void selectSort(int[] data, int sortType) {
  if (sortType == ASC) {
   int index;
   for (int i = 1; i < data.length; i++) {
    index = 0;
    for (int j = 1; j <= data.length - i; j++) {
     if (data[j] > data[index]) {
      index = j;
     }
    }
    swap(data, data.length - i, index);
   }
  } else if (sortType == DESC) {
   int index;
   for (int i = 1; i < data.length; i++) {
    index = 0;
    for (int j = 1; j <= data.length - i; j++) {
     if (data[j] < data[index]) {
      index = j;
     }
    }
    swap(data, data.length - i, index);
   }
  }
 }

}

分享到:
评论

相关推荐

    C语言常用排序方法大全

    【C语言常用排序方法】 在C语言中,排序是编程中常见的任务,涉及到各种不同的算法。以下是几种常见的排序方法: 1. **稳定排序与非稳定排序** - 稳定排序:例如直接插入排序、冒泡排序和归并排序。它们在处理...

    C语言中常用排序方法分析与探讨.pdf

    【C语言中常用排序方法分析与探讨】 在C语言编程中,数据的排序是一个常见的任务,涉及各种不同的算法。本文将深入分析几种经典的排序方法,包括冒泡排序、选择排序、插入排序和快速排序,从它们的基本思想、排序...

    C语言常用排序方法大全.rar

    "C语言常用排序方法大全.rar"这个压缩包文件很可能是为了收集并演示C语言中实现的各种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法,通过不断地交换相邻两个元素的位置,使较大的元素逐渐“冒”到...

    8种常用排序方法java类实现

    本篇文章将详细探讨标题为“8种常用排序方法Java类实现”的主题,主要基于描述中的内容,即8种业务中常见的排序方法在Java语言中的实现。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,通过...

    C语言常用排序方法, 动画演示

    在这个主题下,我们将深入探讨C语言中常见的排序方法,并通过动画演示来直观理解其工作原理。 1. 冒泡排序(Bubble Sort): 冒泡排序是最简单的排序算法之一,它通过不断交换相邻的不正确顺序的元素来逐步排序。...

    C语言中常用排序方法

    本篇将详细讲解三种常见的排序方法:冒泡排序、插入排序和选择排序。 **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一,它通过重复遍历数组,比较相邻元素并交换(如果需要)来实现排序。其工作原理...

    10种常用排序方法.cpp

    内含常用的10种排序方法,包括冒泡,插入,二分,希尔,桶,快排等, 对排序算法的理解很有帮助

    C语言教学中常用排序方法分析.pdf

    本文将深入分析几种常见的排序方法,并为学习者提供专业指导。 首先,我们来探讨最基本的排序算法——冒泡排序。冒泡排序通过不断交换相邻的错误顺序元素来实现排序,其核心是重复地遍历要排序的数列,一次比较两个...

    java常用排序方法

    复习过程中遇到的几种排序,总结一下,望对各位有点用处!

    常用排序方法

    分别实现1)直接插入排序,2)冒泡排序;3)简单选择排序 ;4)希尔排序 5)快速排序。

    JS常用排序方法实例代码解析

    这里将详细解析JavaScript中常用排序方法的实例代码,以便于更好地理解它们的工作原理和使用场景。 首先是`sort()`方法,它是最基本的排序函数,可以在数组上直接进行排序。其默认排序顺序是根据字符串的Unicode码...

    js代码-常用排序方法总结

    本资料集“js代码-常用排序方法总结”旨在全面介绍JavaScript中的各种排序算法,帮助开发者更好地理解和运用这些方法。 首先,最基本的排序方法是`Array.prototype.sort()`。这个内置函数可以接受一个比较函数作为...

    常用内部排序算法的比较与选择

    ### 常用排序方法概述 #### 表1 常用排序算法的综合比较 下面列出了几种常见的内部排序算法及其特点: - **冒泡排序** - **定义**:通过重复地遍历要排序的列表,比较每对相邻项目,并交换它们的位置,直到没有...

    java 排序方法收集

    这里我们将深入探讨Java中的一些常用排序方法,这些方法在日常开发中非常实用,并且对于理解算法和优化代码性能至关重要。 1. **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一。它通过不断地交换相邻...

    字符串排序方法

    - **`sort()`**:这是最常用的排序方法,可以对数组元素进行排序。默认情况下,它会将元素转换为字符串,并按照字符串的Unicode顺序进行排序。 ### 示例代码解析与改进 #### Java代码示例分析 提供的Java代码示例...

Global site tag (gtag.js) - Google Analytics