`
awed
  • 浏览: 34869 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

几种排序方法的比较

J# 
阅读更多
java 代码
  1. public class Sort {   
  2.   
  3.     /**  
  4.      * 插入法:遍历排序集合,每到一个元素时,都要将这个元素与所有它之前的元素遍历比较一遍, 让符合排序顺序的元素挨个移动到当前范围内它最应该出现的位置。交换是相邻遍历移动,  
  5.      * 双重循环控制实现.这种排序法属于地头蛇类型,在我的地牌上我要把所有的东西按一定的顺序 规整,过来一个,规整一个.  
  6.      */  
  7.     public static int[] sort(int[] data) {   
  8.         int temp;   
  9.         for (int i = 1; i < data.length; i++) {   
  10.             for (int j = i; (j > 0) && (data[j] > data[j - 1]); j--) {   
  11.   
  12.                 temp = data[j];   
  13.                 data[j] = data[j - 1];   
  14.                 data[j - 1] = temp;   
  15.             }   
  16.         }   
  17.         return data;   
  18.     }   
  19.   
  20.     /**  
  21.      * 冒泡法:比较容易,它的内层循环保证遍历一次后,集合中最小(大)元素出现在它的正确位置, 下一次就是次小元素。。。该方法在集合分布的各种情况下交换移动的次数基本不变,  
  22.      * 属于最慢的一种排序。实现也是双重循环控制。这种排序法属于过江龙,就是要找到极端, 但是过奖龙也有大哥,二哥等,所以他们只能是大哥挑了二哥挑.  
  23.      */  
  24.     public static int[] maopao(int[] data) {   
  25.         int temp;   
  26.         for (int i = 0; i < data.length - 1; i++) {   
  27.             for (int j = i + 1; j < data.length; j++) {   
  28.                 if (data[i] < data[j]) {   
  29.                     temp = data[i];   
  30.                     data[i] = data[j];   
  31.                     data[j] = temp;   
  32.                 }   
  33.             }   
  34.         }   
  35.         return data;   
  36.     }   
  37.   
  38.     /**  
  39.      * 选择法:该方法只是通过遍历集合记录最小(大)元素的位置,一次遍历完后 ,再进行交换位置操作,类似冒泡,但在比较过程中,不进行交换操作,  
  40.      * 只记录元素位置。一次遍历只进行一次交换操作。这个对与交换次序比较费时的元素比较 适合。这种排序法比冒泡法要城府要深的多,我先记住极端数据,待遍历数据完了之后,  
  41.      * 我再处理,不像冒泡法那样只要比自己极端一点的就要处理,选择法只处理本身范围内的 最极端数据.  
  42.      */  
  43.     public static int[] xuanze(int[] data) {   
  44.         int temp;   
  45.         for (int i = 0; i < data.length; i++) {   
  46.             int lowIndex = i;   
  47.             for (int j = data.length - 1; j > i; j--) {   
  48.                 if (data[j] > data[lowIndex]) {   
  49.                     lowIndex = j;   
  50.                 }   
  51.             }   
  52.             temp = data[i];   
  53.             data[i] = data[lowIndex];   
  54.             data[lowIndex] = temp;   
  55.         }   
  56.         return data;   
  57.     }   
  58.   
  59.     /**  
  60.      * Shell排序:它是对插入排序的一种改进,是考虑将集合元素按照一定的基数划分成组去排序, 让每一组在局部范围内先排成基本有序,最后在进行一次所有元素的插入排序。  
  61.      */  
  62.     public static int[] sort2(int[] data) {   
  63.         for (int i = data.length / 2; i > 2; i /= 2) {   
  64.             for (int j = 0; j < i; j++) {   
  65.                 insertSort(data, j, i);   
  66.             }   
  67.         }   
  68.         insertSort(data, 01);   
  69.         return data;   
  70.     }   
  71.   
  72.     private static void insertSort(int[] data, int start, int inc) {   
  73.         int temp;   
  74.         for (int i = start + inc; i < data.length; i += inc) {   
  75.             for (int j = i; (j >= inc) && (data[j] > data[j - inc]); j -= inc) {   
  76.                 temp = data[j];   
  77.                 data[j] = data[j - inc];   
  78.                 data[j - inc] = temp;   
  79.             }   
  80.         }   
  81.     }   
  82.   
  83.     public static void main(String args[]) {   
  84.         Sort s = new Sort();   
  85.         int str[] = {15925689987452653025781012312546};   
  86.         // 冒泡法排序所花时间   
  87.         Long star = System.currentTimeMillis();   
  88.         for (int j = 0; j < 100000; j++)   
  89.             str = s.maopao(str);   
  90.         Long end = System.currentTimeMillis();           
  91.         for (int i = 0; i < str.length; i++) {   
  92.             System.out.print(str[i] + " ");   
  93.         }   
  94.         System.out.println("冒泡排序所花时间: " + (end - star));   
  95.   
  96.         // 插入法排序所花时间   
  97.         star = System.currentTimeMillis();   
  98.         for (int j = 0; j < 100000; j++)   
  99.             str = s.sort(str);   
  100.         end = System.currentTimeMillis();   
  101.         for (int i = 0; i < str.length; i++) {   
  102.             System.out.print(str[i] + " ");   
  103.         }   
  104.         System.out.println("插入法排序所花时间: " + (end - star));   
  105.   
  106.         // Shell排序法排序所花时间   
  107.         star = System.currentTimeMillis();   
  108.         for (int j = 0; j < 100000; j++)   
  109.             str = s.sort2(str);   
  110.         end = System.currentTimeMillis();   
  111.         for (int i = 0; i < str.length; i++) {   
  112.             System.out.print(str[i] + " ");   
  113.         }   
  114.         System.out.println("Shell排序法排序所花时间: " + (end - star));   
  115.   
  116.         // 选择法排序所花时间   
  117.         star = System.currentTimeMillis();   
  118.         for (int j = 0; j < 100000; j++)   
  119.             str = s.xuanze(str);   
  120.         end = System.currentTimeMillis();   
  121.         for (int i = 0; i < str.length; i++) {   
  122.             System.out.print(str[i] + " ");   
  123.         }   
  124.         System.out.println("选择法排序所花时间: " + (end - star));   
  125.     }   
  126. }  

比较结果是:

98 89 78 74 65 56 52 46 31 30 25 25 12 10 9 5 2 1 冒泡排序所花时间: 125
98 89 78 74 65 56 52 46 31 30 25 25 12 10 9 5 2 1 插入法排序所花时间: 15
98 89 78 74 65 56 52 46 31 30 25 25 12 10 9 5 2 1 Shell排序法排序所花时间: 63
98 89 78 74 65 56 52 46 31 30 25 25 12 10 9 5 2 1 选择法排序所花时间: 94

 

分享到:
评论

相关推荐

    基于C语言的几种排序方法比较.pdf

    在这篇比较文档中,介绍了这三种排序算法的C语言实现方法,通过源程序清单展示了每种算法的具体编码实现,这对于C语言编程初学者来说是很好的学习资料。程序中使用了标准输入输出库stdio.h和内存管理库malloc.h,...

    几种排序方法

    C++中的几种排序方法介绍,并给出相关代码。包括冒泡排序法,简单排序法,希尔排序法和快速排序法

    Java几种排序方法

    根据给定的信息,本文将详细介绍Java中的四种基本排序算法:冒泡排序、插入排序、快速排序和选择排序。...以上四种排序算法各有优缺点,适用场景也不同。在实际应用中,根据具体需求选择合适的排序算法是非常重要的。

    常见几种排序方式(选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序)

    常见的几种排序方式,包括选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序。vs2008实现,对话框方式,主要实现字符串的由小到大...点击“几种排序方法.vcproj“运行。字符集使用多字节集,不能用UNICODE。

    javascript 的几种排序方法

    以上就是JavaScript中常用的几种排序方法。理解并熟练运用它们,能够帮助你在处理数据时更加游刃有余。在实际项目中,可以根据具体需求选择合适的方法,或者利用现有的库和工具提高代码的可读性和可维护性。

    Java实现几种常见排序方法

    ### Java 实现几种常见排序方法 #### 泡泡排序(Bubble Sort) 泡泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复...

    数组的几种排序方法

    本篇文章将深入探讨数组的几种常见排序方法,包括冒泡排序、选择排序和插入排序,这些都是基础且实用的排序算法,对于理解更复杂的排序算法有着重要的铺垫作用。 ### 冒泡排序 冒泡排序是一种简单直观的排序算法。...

    用几种排序方法对随机产生的数据排序

    以下是关于这几种排序方法的详细介绍: 1. **堆排序(Heap Sort)** 堆排序是一种基于比较的原地排序算法,它利用了完全二叉树的特性。首先构建大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整堆,重复此...

    数据结构常见排序的几种方法

    本程序涵盖了数据结构中常见的几种排序方法,下面将对这些排序算法进行详细介绍。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一。它通过不断比较相邻元素并交换位置来实现排序,重复这一过程,直到...

    几种不同排序的比较及其算法

    这里我们将深入探讨几种常见的排序算法,包括插入排序、快速排序以及堆排序,它们各自有其特点和适用场景。 首先,我们来看插入排序(Insertion Sort)。插入排序是一种简单的排序算法,其基本思想是将待排序的数据...

    几种排序方法的具体代码

    以下是标题“几种排序方法的具体代码”中涉及的几种排序算法的详细解释: 1. **插入排序**(Insertion Sort): 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序...

    几种内排序的方法 数据结构报告c++代码

    内排序是计算机科学中一种重要的算法,用于在内存中对数据进行排序。在这个数据结构报告中,我们将深入探讨...通过实验报告,我们可以分析不同算法在各种输入条件下的运行时间,从而选择最适合特定应用场景的排序方法。

    几种常见的排序方法

    几种常见的排序方法 1. 选择排序法基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 2.插入排序(Insertion Sort)的基本思想是...

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。

    设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...

    关于几种排序算法的比较分析

    关于数据的几种排序算法的程序对比分析,结合具体案例

    几种排序方法及栈的应用

    主要是源代码 包括几种排序方法 选择 基数 快速排序 及栈的运用。

    几种排序算法总结及比较

    这里我们将深入探讨几种常见的排序算法,并在VS2013环境下进行实现和比较。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的交换排序,它通过重复遍历待排序的数列,依次比较相邻元素并根据需要交换位置,直到...

Global site tag (gtag.js) - Google Analytics