1、插入排序算法
/*
* Simple insertion sort.
* @param a an array of Comparable items.
*/
public static void insertionSort(Comparable[] a)
{
for(int p=1; p < a.length ;p++){
Comparable tmp = a[p];//临时变量
int j = p;
for(; j>0 && tmp.compareTo(a[j-1])< 0; j--)
a[j] = a[j-1];
a[j] = tmp;
}
}
时间复杂度是:O(N*N),如果输入被预先排序,运行时间将是O(N)。
算法思路:首先将需要插入排序的元素放入临时变量,然后将所有比它大的元素都向右移动一个位置,最后将临时变量复制进腾出的位置上。
2、快速排序
/*
* Quicksort algorithm(driver).
*/
public static void quicksort( Comparable[] a ){
quicksort(a,0,a.length-1);
}
/*
* Internal quicksort method that makes recursive calls.
* Uses median-of-three partitioning and a cutoff.
* 使用三者取中拆分和小数组截断点的快速排序
*/
private static void quicksort(Comparable[] a , int low, int high){
if(low + CUTOFF > high )
insertionSort(a,low,high);//测试小数组,当问题小于CUTOFF给出特定值时用插
//入排序
else{
//对low, middle, high位置处的元素进行排序,然后将它们放在合适的位置。
int middle = ( low + high )/2;
if(a[middle].compareTo(a[low]) < 0 )
swap(a, low, middle);//交换low与middle的值
if(a[high].compareTo(a[low]) < 0 )
swap(a, low, high);
if(a[high].compareTo(a[middle]) < 0 )
swap(a, middle, high);
swap(a, middle , high-1);
Comparable pivot = a[high - 1];//支点的设置
int i,j;
for(i=low, j = high-1; ;){
while( a[++i].compareTo( pivot ) < 0 )
;
while( pivot.compareTo( a[--j]) < 0 )
;
if( i >= j)
break;
swap(a, i , j);
}
swap(a, i ,high-1);//确定支点的位置
quicksort(a, low, i-1);
quicksort(a, i+1, high);
}
}
平均时间复杂度为O(N logN)
分享到:
相关推荐
本篇文章将详细讲解标题中提到的六种常见排序算法的Java实现。 1. **冒泡排序**:冒泡排序是最基础的排序算法之一,它通过不断交换相邻的逆序元素来逐渐将较大的元素“浮”到数组的前端。在Java中,冒泡排序的基本...
分治法可以用于快排、合并排序、0-1背包问题等问题。 Prim 算法求最小生成树也是一种常见的应用。 四、实验结果 在实验中,我们使用 Java 语言实现了选择排序、冒泡排序和插入排序的算法,并对其进行了测试。实验...
插入排序是一种简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在Java中实现插入排序,主要涉及数组操作和循环控制,我们可以从以下几个方面来理解这...
【IT面试笔试中的排序算法Java实现】 在IT面试和笔试中,掌握各种排序算法的实现是必不可少的技能。本文将详细介绍几种经典的排序算法,并提供Java语言的实现代码,包括冒泡排序、插入排序、选择排序和快速排序。...
这篇博客“常用排序算法小结(附Java实现)”提供了一种深入理解并掌握常见排序算法的途径,尤其对于Java开发者来说非常实用。文章可能涵盖了如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等多种经典...
这里我们主要探讨的是五种不同的排序算法:插入排序、选择排序、快速排序、希尔排序以及冒泡排序,它们都有对应的链表实现。让我们逐一深入理解这些算法。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观...
本项目在Eclipse环境中使用JAVA编程语言实现了四种常见的排序算法:冒泡排序、插入排序、选择排序以及快速排序。这四种算法各有特点,适用于不同的场景。 1. **冒泡排序**: 冒泡排序是最基础的排序方法之一。它...
### Java常用八大排序算法详解 #### 一、直接插入排序 **基本思想:** 直接插入排序的基本思路是在要排序的一组数中,假设前面 (n-1) [n>=2] 个数已经排好顺序,现在要把第 n 个数插入到前面的有序数列中,使得这 ...
这里我们主要关注三种排序算法的Java实现:快速排序、桶排序以及插入排序。这三种算法各有特点,适用于不同的场景。 首先,快速排序(QuickSort)是由C.A.R. Hoare在1960年提出的,它是一种分治策略的典型应用。...
本篇文章将详细介绍几种常用的Java排序算法,包括它们的基本思想、实现代码以及时间复杂度分析。 #### 二、插入排序 **1. 直接插入排序** - **基本思想**:对于一个无序的数据集合,假设前面n-1个数据已经排好序...
## 九种内部排序算法的Java实现及其性能测试 ### 9种内部排序算法性能比较 第九种为java.util.Arrays.sort(改进的快速排序方法) 1. 100000的随机数据集 ![](http://7xlkoc.com1.z0.glb.clouddn.com/sort1.jpg) ...
在Java编程语言中,排序算法是数据结构与算法学习中的重要组成部分。本实验通过生成大量随机数并写入文件,然后使用四种不同的排序算法进行排序,以比较它们的效率。以下是对这四种排序算法的详细解释: 1. **冒泡...
本项目是一个小型的排序系统,其核心特点在于能够处理任意类型的数据,并且采用了五种不同的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及堆排序。下面将详细探讨这些知识点。 首先,**泛型**是Java...
冒泡排序、快速排序、直接插入排序、简单选择排序 等经典算法的思想介绍,大白话简单易懂。并用java实现。代码拿去即可用,不需做任何修改! 部分内容: /** * 快排:O(n*logn);如果是从小到大排序; * 思想:选...
在给定的文档中,介绍了多种常见的排序算法,包括冒泡排序、快速排序、选择排序、插入排序等,并提供了相应的Java代码实现。 冒泡排序(Bubble Sort)是一种简单的比较排序算法,其基本思想是通过重复遍历待排序...
快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1959年提出。它采用分而治之的策略来提高排序效率,是许多编程语言中默认的排序算法之一。在Java中,快速排序广泛应用于...
根据给定的信息,本文将详细介绍如何使用Java语言来实现几种常见的排序算法,包括插入排序(Insertion Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及希尔排序(Shell Sort)。这些排序算法在...
下面将详细讲解这两种排序算法的原理、Java实现及其特点。 **快速排序** 快速排序是一种分治算法,由C.A.R. Hoare在1960年提出。它的基本思想是选择一个基准元素,将数组分为两部分,一部分的所有元素都小于基准,...
本篇文章将详细介绍Java中常用的几种排序算法,并分析它们的特点。 #### 二、排序算法分类 1. **插入排序** - **直接插入排序**:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并...