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

快速排序List的通用方法

阅读更多
导读:
  
  
  
  
  
  /** *//**
  
  * 快速排序列表中的元素,List中的元素必须实现了Comparable接口
  
  
  *
  
  
  * @param list
  
  
  * 列表
  
  
  * @param fromIndex
  
  
  * 左索引(排序开始索引)
  
  
  * @param toIndex
  
  
  * 右索引(排序结束结束索引)
  
  
  * @throws Exception
  
  
  */
  
  public static void quickSortList(List<comparable> list, int fromIndex, int toIndex)
  
  
  
  
  throws Exception ...{
  
  
  int tempFromIndex = fromIndex; // 左索引
  
  int tempToIndex = toIndex; // 右索引
  
  Comparable midElement; // 分割元素
  
  Comparable tempElement; // 临时变量,存储所取的列表中的元素
  
  
  
  
  
  if (toIndex > fromIndex) ...{
  
  
  
  
  
  
  /**//*
  
  * 取列表中间索引的值的对象作为分割元素
  
  
  */
  
  midElement = (Comparable) list.get((fromIndex + toIndex) / 2);
  
  
  
  
  // 循环列表直到索引交叉
  
  
  
  while (tempFromIndex <= tempToIndex) ...{
  
  
  
  
  /**//*
  
  * 从左索引方向开始找到第一个大于或等于分割元素的元素
  
  
  */
  
  
  
  while (tempFromIndex < toIndex) ...{
  
  
  tempElement = (Comparable) list.get(tempFromIndex);
  
  
  if (tempElement.compareTo(midElement) < 0)
  
  
  ++tempFromIndex;
  
  
  else
  
  break
  
  }
  
  
  
  
  
  /**//*
  
  * 从右索引方向开始找到第一个小于或等于分割元素的的元素
  
  
  */
  
  
  
  while (tempToIndex > fromIndex) ...{
  
  
  tempElement = (Comparable) list.get(tempToIndex);
  
  
  if (tempElement.compareTo(midElement) > 0)
  
  
  --tempToIndex;
  
  
  else
  
  break
  
  }
  
  
  
  // 如果索引没有交叉则交换两个对象位置
  
  
  
  if (tempFromIndex <= tempToIndex) ...{
  
  
  swap(list, tempFromIndex, tempToIndex);
  
  
  
  
  ++tempFromIndex;
  
  
  --tempToIndex;
  
  
  }
  
  }
  
  
  
  
  
  /**//*
  
  * 如果右索引没有到达左索引,则排序左边区域
  
  
  */
  
  if (fromIndex < tempToIndex)
  
  
  quickSortList(list, fromIndex, tempToIndex);
  
  
  
  
  
  
  /**//*
  
  *
  
  
  * 如果左索引没有到达右索引,则排序右边区域
  
  
  */
  
  if (tempFromIndex < toIndex)
  
  
  quickSortList(list, tempFromIndex, toIndex);
  
  
  
  
  }
  
  }
  
  
  
  
  
  /** *//**
  
  * 交换列表中的两个位置的对象
  
  
  *
  
  
  * @param list
  
  
  * 列表
  
  
  * @param i
  
  
  * 索引
  
  
  * @param j
  
  
  * 索引
  
  
  */
  
  
  
  private static void swap(List list, int i, int j) ...{
  
  
  Object io = list.get(i);
  
  
  Object jo = list.get(j);
  
  
  
  
  list.remove(i);
  
  
  list.add(i, jo);
  
  
  
  
  
  list.remove(j);
  
  
  list.add(j, io);
  
  
  }
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1896685

本文转自
http://blog.csdn.net/mrshan/archive/2007/11/21/1896685.aspx
分享到:
评论

相关推荐

    DataSet 转化为List的通用方法

    ### DataSet 转化为 List 的通用方法:深入解析与应用 在 IT 领域,数据处理是一项核心任务,特别是在数据库操作与数据展现层之间,数据格式的转换显得尤为重要。其中,`DataSet`到`List`的转换是常见的需求之一,...

    基于python实现的快速排序算法.zip

    在实际编程中,Python的内置`sorted()`函数和`list.sort()`方法已经实现了高效的排序,底层可能采用的算法包括快速排序、堆排序或者Timsort等,具体取决于数据的特性和版本。如果需要自定义排序逻辑,理解并能实现...

    c#集合快速排序类实现代码分享

    接下来,我们看一下SortList方法,该方法是对外暴露的接口,用户可以通过传入集合对象、排序属性名和排序方向来实现快速排序。该方法会根据传入的参数信息来进行排序,首先是获取集合中的对象的属性信息,然后根据...

    list_list_STL_C++_

    此外,`sort()`操作的时间复杂度为O(n log n),与通用排序算法类似。 **4. list与其它容器的对比** - **vector**:vector是动态数组,随机访问速度快,但插入和删除元素时需要移动大量元素,效率较低。 - **deque*...

    IList和List的区别

    这里可以看到,尽管`IList&lt;TestClass&gt;`和`List&lt;TestClass&gt;`在添加和遍历元素上的表现相同,但在执行排序操作(如`OrderBy`)时,由于`List&lt;TestClass&gt;`已经实现了排序所需的方法,所以其性能通常会优于`IList...

    C#简单实现泛型选择排序

    在编程领域,排序算法是数据处理中的基础,它在各种应用中都发挥着重要作用。...而选择排序虽然在效率上不如快速排序或归并排序,但其简单的实现和固定的比较次数在某些特定场景下仍然具有一定的价值。

    vc CListCtrl排序-源程序

    这里可以使用通用的快速排序算法,但因为CListCtrl的数据通常是存储在CListCtrl内部的,所以排序时不能直接改变控件中的数据,而是应该先复制到一个数组,排序数组,然后重新设置控件中的数据。例如: ```cpp void ...

    Java集合排序及java集合类详解(Collection、List、Map、Set)借鉴.pdf

    它包含了一些通用的方法,如add()用于添加元素,remove()用于移除元素,size()返回元素数量等。 1.2.1 常用方法 Collection接口中的常用方法还包括contains()用于检查是否包含特定元素,clear()用于清空集合,...

    559.557.JAVA基础教程_集合-Collections工具类常用方法的测试(559).rar

    首先,Collections工具类提供了一些通用的操作方法,例如`sort()`,它可以对List进行排序。`sort(List&lt;T&gt; list)`方法使用自然顺序对指定列表进行排序,如果列表元素是自定义类型,那么需要实现Comparable接口来定义...

    Java集合排序及java集合类详解(Collection、List、Map、Set

    本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    对于`List`,可以使用`Collections.sort()`方法进行排序,而对于`Set`和`Map`则通常通过自定义比较器来实现排序的需求。 - **排序示例**:假设有一个`List`存储了一些员工对象,可以通过`Collections.sort(list, ...

    集合概述set、List、Map

    Collection接口定义了一些通用的方法,如增加元素(add)、删除元素(remove)、获取元素数量(size)等。 ##### 2.1 常用方法 - `add(E e)`:向集合中添加一个元素。 - `remove(Object o)`:从集合中移除指定的元素。 -...

    HASHMAP排序功能描述

    更通用的方法是将HashMap的键值对转化为List,然后使用Collections.sort()方法进行排序。这里可以自定义比较器Comparator来决定排序规则,比如按照key的数值大小排序。 **3. 示例代码** 以下是一个使用Collections...

    通用控件的使用方法详解与实例

    3. 列表控制(CListCtrl)和列表视(List View)用于显示多项数据,可以有单列或多列,支持各种排序和选择方式。 4. 树控制(CTreeCtrl)和树视(Tree View)则用于显示层次结构的数据,常用于文件浏览器或选项设置...

    云守护版排序算法

    在C++中,我们可以使用内置的`std::sort`函数,它基于快速排序或归并排序,提供高效的排序服务。然而,理解基本的排序算法原理对于优化代码和解决特定问题至关重要。 1. **冒泡排序**:是最基础的排序算法,通过...

    各种排序代码

    这些排序算法包括但不限于冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。这些算法在数组和链表结构上都有其特定的应用和优化。 1. **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组,比较...

    自定义的报表,使用LISTCTRL等控件对数据库进行操作

    总的来说,创建一个简单的报表系统,使用C++和LISTCTRL控件,可以帮助开发者快速实现数据可视化和分析。通过与数据库的高效交互,可以满足不同层次用户对数据的需求,为企业决策提供有力支持。不过,实际开发过程中...

    基于Element封装一个表格组件tableList的使用方法

    Element UI 是一个基于 Vue.js 的前端框架,用于快速搭建美观且易于维护的网页界面。在现代网页开发中,表格组件作为展示数据的基本组件之一,需要频繁使用。Element UI 自带的表格组件(el-table)提供了丰富的功能...

    generic-examples-practise:通用排序示例

    然而,为了实现通用排序,我们需要理解排序算法的基本原理,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。 1. **冒泡排序**:这是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换位置(如果...

    C# 各种通用类集合

    9. **SortedDictionary, TValue&gt;** 和 **SortedList, TValue&gt;**: 这两个集合类都是有序的键值对集合,不同之处在于SortedDictionary使用自定义比较器,而SortedList则根据键的自然顺序排序。 在ASP.NET Web API开发...

Global site tag (gtag.js) - Google Analytics