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语言中,排序是编程中常见的任务,涉及到各种不同的算法。以下是几种常见的排序方法: 1. **稳定排序与非稳定排序** - 稳定排序:例如直接插入排序、冒泡排序和归并排序。它们在处理...
【C语言中常用排序方法分析与探讨】 在C语言编程中,数据的排序是一个常见的任务,涉及各种不同的算法。本文将深入分析几种经典的排序方法,包括冒泡排序、选择排序、插入排序和快速排序,从它们的基本思想、排序...
"C语言常用排序方法大全.rar"这个压缩包文件很可能是为了收集并演示C语言中实现的各种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法,通过不断地交换相邻两个元素的位置,使较大的元素逐渐“冒”到...
本篇文章将详细探讨标题为“8种常用排序方法Java类实现”的主题,主要基于描述中的内容,即8种业务中常见的排序方法在Java语言中的实现。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,通过...
在这个主题下,我们将深入探讨C语言中常见的排序方法,并通过动画演示来直观理解其工作原理。 1. 冒泡排序(Bubble Sort): 冒泡排序是最简单的排序算法之一,它通过不断交换相邻的不正确顺序的元素来逐步排序。...
本篇将详细讲解三种常见的排序方法:冒泡排序、插入排序和选择排序。 **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一,它通过重复遍历数组,比较相邻元素并交换(如果需要)来实现排序。其工作原理...
内含常用的10种排序方法,包括冒泡,插入,二分,希尔,桶,快排等, 对排序算法的理解很有帮助
本文将深入分析几种常见的排序方法,并为学习者提供专业指导。 首先,我们来探讨最基本的排序算法——冒泡排序。冒泡排序通过不断交换相邻的错误顺序元素来实现排序,其核心是重复地遍历要排序的数列,一次比较两个...
复习过程中遇到的几种排序,总结一下,望对各位有点用处!
分别实现1)直接插入排序,2)冒泡排序;3)简单选择排序 ;4)希尔排序 5)快速排序。
这里将详细解析JavaScript中常用排序方法的实例代码,以便于更好地理解它们的工作原理和使用场景。 首先是`sort()`方法,它是最基本的排序函数,可以在数组上直接进行排序。其默认排序顺序是根据字符串的Unicode码...
本资料集“js代码-常用排序方法总结”旨在全面介绍JavaScript中的各种排序算法,帮助开发者更好地理解和运用这些方法。 首先,最基本的排序方法是`Array.prototype.sort()`。这个内置函数可以接受一个比较函数作为...
### 常用排序方法概述 #### 表1 常用排序算法的综合比较 下面列出了几种常见的内部排序算法及其特点: - **冒泡排序** - **定义**:通过重复地遍历要排序的列表,比较每对相邻项目,并交换它们的位置,直到没有...
这里我们将深入探讨Java中的一些常用排序方法,这些方法在日常开发中非常实用,并且对于理解算法和优化代码性能至关重要。 1. **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一。它通过不断地交换相邻...
- **`sort()`**:这是最常用的排序方法,可以对数组元素进行排序。默认情况下,它会将元素转换为字符串,并按照字符串的Unicode顺序进行排序。 ### 示例代码解析与改进 #### Java代码示例分析 提供的Java代码示例...