`
fuhao_987
  • 浏览: 63689 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

常用排序算法-java实现(插入,快排)

    博客分类:
  • Java
阅读更多
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实现(冒泡、插入、选择、希尔、归并、快排)

    本篇文章将详细讲解标题中提到的六种常见排序算法的Java实现。 1. **冒泡排序**:冒泡排序是最基础的排序算法之一,它通过不断交换相邻的逆序元素来逐渐将较大的元素“浮”到数组的前端。在Java中,冒泡排序的基本...

    用蛮力法实现选择排序,冒泡排序程序;用减治法实现插入排序;分治法应用-快排,合并排序,0-1背包问题;Prim算法求最小生成树。伪代码以及java代码实现

    分治法可以用于快排、合并排序、0-1背包问题等问题。 Prim 算法求最小生成树也是一种常见的应用。 四、实验结果 在实验中,我们使用 Java 语言实现了选择排序、冒泡排序和插入排序的算法,并对其进行了测试。实验...

    java实现插入排序

    插入排序是一种简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在Java中实现插入排序,主要涉及数组操作和循环控制,我们可以从以下几个方面来理解这...

    IT面试笔试-各种排序算法Java实现

    【IT面试笔试中的排序算法Java实现】 在IT面试和笔试中,掌握各种排序算法的实现是必不可少的技能。本文将详细介绍几种经典的排序算法,并提供Java语言的实现代码,包括冒泡排序、插入排序、选择排序和快速排序。...

    常用排序算法小结(附Java实现)

    这篇博客“常用排序算法小结(附Java实现)”提供了一种深入理解并掌握常见排序算法的途径,尤其对于Java开发者来说非常实用。文章可能涵盖了如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等多种经典...

    插入,选择排序的链表实现及快速,希尔,冒泡排序算法实现合集

    这里我们主要探讨的是五种不同的排序算法:插入排序、选择排序、快速排序、希尔排序以及冒泡排序,它们都有对应的链表实现。让我们逐一深入理解这些算法。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观...

    常用排序算法(冒泡、插入、选择、快速)

    本项目在Eclipse环境中使用JAVA编程语言实现了四种常见的排序算法:冒泡排序、插入排序、选择排序以及快速排序。这四种算法各有特点,适用于不同的场景。 1. **冒泡排序**: 冒泡排序是最基础的排序方法之一。它...

    Java常用8大排序算法

    ### Java常用八大排序算法详解 #### 一、直接插入排序 **基本思想:** 直接插入排序的基本思路是在要排序的一组数中,假设前面 (n-1) [n&gt;=2] 个数已经排好顺序,现在要把第 n 个数插入到前面的有序数列中,使得这 ...

    三种排序算法java实现

    这里我们主要关注三种排序算法的Java实现:快速排序、桶排序以及插入排序。这三种算法各有特点,适用于不同的场景。 首先,快速排序(QuickSort)是由C.A.R. Hoare在1960年提出的,它是一种分治策略的典型应用。...

    Java常用排序算法

    本篇文章将详细介绍几种常用的Java排序算法,包括它们的基本思想、实现代码以及时间复杂度分析。 #### 二、插入排序 **1. 直接插入排序** - **基本思想**:对于一个无序的数据集合,假设前面n-1个数据已经排好序...

    九种内部排序算法,Java版

    ## 九种内部排序算法的Java实现及其性能测试 ### 9种内部排序算法性能比较 第九种为java.util.Arrays.sort(改进的快速排序方法) 1. 100000的随机数据集 ![](http://7xlkoc.com1.z0.glb.clouddn.com/sort1.jpg) ...

    java排序算法效率比较

    在Java编程语言中,排序算法是数据结构与算法学习中的重要组成部分。本实验通过生成大量随机数并写入文件,然后使用四种不同的排序算法进行排序,以比较它们的效率。以下是对这四种排序算法的详细解释: 1. **冒泡...

    采用各种排序算法,支持任意类型数据的小型排序系统

    本项目是一个小型的排序系统,其核心特点在于能够处理任意类型的数据,并且采用了五种不同的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及堆排序。下面将详细探讨这些知识点。 首先,**泛型**是Java...

    几种经典的排序算法java实现

    冒泡排序、快速排序、直接插入排序、简单选择排序 等经典算法的思想介绍,大白话简单易懂。并用java实现。代码拿去即可用,不需做任何修改! 部分内容: /** * 快排:O(n*logn);如果是从小到大排序; * 思想:选...

    Java实现几种常见排序方法-直插、冒泡、选择、快排、堆排等

    在给定的文档中,介绍了多种常见的排序算法,包括冒泡排序、快速排序、选择排序、插入排序等,并提供了相应的Java代码实现。 冒泡排序(Bubble Sort)是一种简单的比较排序算法,其基本思想是通过重复遍历待排序...

    快排算法java

    快速排序(Quick Sort)是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1959年提出。它采用分而治之的策略来提高排序效率,是许多编程语言中默认的排序算法之一。在Java中,快速排序广泛应用于...

    用Java实现几种常见的排序算法

    根据给定的信息,本文将详细介绍如何使用Java语言来实现几种常见的排序算法,包括插入排序(Insertion Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及希尔排序(Shell Sort)。这些排序算法在...

    快速和插入排序

    下面将详细讲解这两种排序算法的原理、Java实现及其特点。 **快速排序** 快速排序是一种分治算法,由C.A.R. Hoare在1960年提出。它的基本思想是选择一个基准元素,将数组分为两部分,一部分的所有元素都小于基准,...

    Java各种排序算法

    本篇文章将详细介绍Java中常用的几种排序算法,并分析它们的特点。 #### 二、排序算法分类 1. **插入排序** - **直接插入排序**:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并...

Global site tag (gtag.js) - Google Analytics