/**
* 插入排序,当数组有序的时候是比较快的排序方法 非稳定算法,最快(当数组有序时)为线性(O(n)) 最慢以及平均情况都是为(O(n^2))二次算法
* @param <T>
* 范型参数
* @param data
* 要排序的数组
*/
public static <T extends Comparable<T>> void insertionSort(T[] data) {
if (data == null) // 检查数组参数
throw new IllegalArgumentException("data is empty!");
int i, j;
T temp;
for (i = 1; i < data.length; i++) {
temp = data[i]; // 当检查数组中的元素不在正确的位置就和前面的元素交换,直到插入到正确的位置为止。
for (j = i; j > 0 && data[j - 1].compareTo(temp) > 0; j--) {
data[j] = data[j - 1];
}
data[j] = temp;
}
}
/**
* 快速排序,非稳定的排序算法,确定为基数选择错误的时候,排序效率为二次 平均情况为(O(nlogn)),最坏情况为(O(n^2))
* @param <T>
* 范型参数
* @param data
* 要排序的数组
*/
public class QuickSortTest {
public static int[] sort(int[] numbers) {
return sort(numbers, 0, numbers.length - 1);
}
public static int[] sort(int[] numbers, int low, int high) {
if (low < high) {
int media = numbers[low];
int j = high;
int i = low;
while (i != j) {
while (j > i && numbers[j] >= media)
j--;
swap(numbers, i, j);
while (i < j && numbers[i] <= media)
i++;
swap(numbers, i, j);
}
sort(numbers, low, i - 1);
sort(numbers, i + 1, high);
}
return numbers;
}
public static void swap(int[] numbers, int i, int j) {
int media = numbers[i];
numbers[i] = numbers[j];
numbers[j] = media;
}
public static void main(String[] args) {
int[] a = sort(new int[] { 6,8, 7, 6, 5,10, 4, 3, 2, 1 });
for (int i : a)
System.out.print(i);
}
分享到:
相关推荐
选择排序、插入排序和快速排序都是经典的排序算法,各有其特点和适用场景。接下来,我们将详细探讨这三个排序算法。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法。它的基本思想是在未...
基本排序气泡排序插入排序快速排序双通道快速排序三通道快速排序堆排序.zip
本资源包"选择排序 冒泡排序 插入排序 快速排序 堆排序.zip"聚焦于五种经典的排序算法,包括选择排序、冒泡排序、插入排序、快速排序以及堆排序。这些算法的实现语言是Objective-C,这是一种强大的面向对象的编程...
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
这里我们将深入探讨几种常见的排序算法:冒泡排序、插入排序、快速排序、双路快速排序、三路快速排序以及堆排序。 **1. 冒泡排序** 冒泡排序是最基础的排序算法之一,其工作原理类似于水底下的气泡逐渐上浮。通过...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序...
**双路快速排序**是在快速排序的基础上进行优化,主要解决了快速排序在处理含有大量重复元素时效率下降的问题。双路快排会把小于基准的元素放在基准左边,大于基准的元素放在右边,同时,相等的元素会被放在基准的一...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
快速排序和直接插入排序是两种常见的排序算法,它们各自具有不同的特性和应用场景。在实际编程中,有时会根据数据特点和需求将这两种排序方法结合使用,以达到更高效的排序效果。 快速排序是一种由C.A.R. Hoare在...
21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半插入排序 22、冒泡排序 23、快速排序 24...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...