首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>C#语言>快速进行List排序的通用方法代码
快速进行List排序的通用方法代码
来源: 发布时间:2007-11-22 发布人: 浏览: 人次   字体: [ ]  
/**
     * 快速排序列表中的元素,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);
    }

相 关 文 章   发布商链接
·C#实现病毒及流氓软件能够自我复制的...
·String.Split 方法使用及其代码示例
·C#实现人民币(RMB)转化为大写字母...
·用C#操作类读写WinCE平台Mac地址代码...
·C#中判断字符是否为中文代码
·C#实现更改IP功能源码
·初学者参考C#中操作XML修改完整版
·谈谈对C#委托的理解,附代码实例
·C#中操作XML Node节点细节操作
·浅谈C#对象深拷贝、浅铐贝、直接拷贝
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·有助快速理解C#委托和事件之...
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
热 门 文 章
·c#中收发邮件处理代码(POP3,...
·C#如何获取文件路径中的文件...
·什么是c#深拷贝与浅拷贝及其...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·C#语言实现创建、删除和移动...
·C#对timer类的使用操作代码
·String.Split 方法使用及其代...
·如何在c#中去掉字符串中的回...
·用C#编写ActiveX控件代码实例
·C#语言实现从XML文件导出数据...
·C#如何从文本文件读取信息并...
·浅谈接口和抽象类的区别,加...
·c#子线程控制进度条的一个简...
·C#语言绘制实时曲线图代码实...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .