官方首页
 计算机科学与技术
 湖畔文学
 星之传说
 蓝色湖畔桃园
 湖畔艺术
 湖畔科技
 本站留言
热门关键字:    dreamlandcn.com    蓝色湖畔
 >>相关文章
·.NET 4特性聚焦:并行编程
·Java之路(3)--写好你程
·Java之路(2)--写好你程
·什么样的软件公司具有持久生命力
·在SSH架构中出现异常时
·JVM怎么清理栈中的引用
·美国金融风暴席卷全球 又见IT
·Baidu收录是否限制Alim
·“网游大盗”成为2008年十大
·阿里巴巴投3000万美元全球推
 >>点击排行TOP10
·多种排序算法,多种语言讲解(前言)
·多种排序算法,多种语言讲解(简单选
·多种排序算法,多种语言讲解(冒泡排
·多种排序算法,多种语言讲解(堆排序
·多种排序算法,多种语言讲解(快速排
·【其它欣赏】少儿不宜的设计
·多种排序算法,多种语言讲解(树形选
·多种排序算法,多种语言讲解(交换排
·多种排序算法,多种语言讲解(希尔排
·如何使用EasyRecovery找
·多种排序算法,多种语言讲解(总结)
·多种排序算法,多种语言讲解(直接插
·多种排序算法,多种语言讲解(归并排
·c#网络应用编程基础 第5章 Wi
·VC中使用GetModuleFil
 
 当前位置:网站首页 > 计算机科学与技术 > 算法 > 浏览正文
多种排序算法,多种语言讲解(前言)
作者:佚名    来源:本站原创    点击数:   更新时间:2008年06月17 【字体:

本文作者:思念天灵,QQ: 47913857,网站:www.dreamlandcn.com

欢迎来访询问与讨论,本文有错的地方,愿能各位谅解并给予批评指出。

如果引用本文内容请注明出处,谢谢。

         排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。(《数据结构(C语言版)》,(清华大学出版社),263页)目前常用的排序算法有很多种,其中包括了容易简单理解的排序算法,和一些时间和空间较小的经典算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。当然,目前因为.net Framework 2.0中有Array类,并且该类中拥有Sort()函数,可以大大简化我们排序的工作。以下例子仅供参考,本人仅仅作了整形数组的排序,其他还可以进行许多类型的排序,如stringbool(boolen)int(integer)object等类型的排序。

例:.net Framework中的Array.Sort()函数例子

VB

Module Module1

 

    ''' <summary>

    ''' 排序,使用Array.Sort()函数,Powered By 思念天灵

    ''' </summary>

    ''' <remarks></remarks>

    Sub Main()

        Dim myArray(0 To 11) As Integer

        myArray(0) = 22

        myArray(1) = 53

        myArray(2) = 72

        myArray(3) = 11

        myArray(4) = 34

        myArray(5) = 44

        myArray(6) = 11

        myArray(7) = 15

        myArray(8) = 28

        myArray(9) = 3

        myArray(10) = 10

        myArray(11) = 65

        Array.Sort(myArray)

        For Each x As Integer In myArray

            Console.Write("{0},", x)

        Next

        Console.ReadKey()

    End Sub

 

End Module

C#

using System;

using System.Collections.Generic;

using System.Text;

 

namespace SortClass

{

    class Program

{

        /// <summary>

        /// 排序,使用Array.Sort()函数,Powered By 思念天灵

        /// </summary>

    /// <param name="args"></param>

        static void Main(string[] args)

        {

            int[] myArray = { 22, 53, 72, 11, 34, 44, 11, 15, 28, 3, 10, 65 };

            Array.Sort(myArray);

            foreach (int x in myArray)

            {

                Console.Write("{0},", x);

            }

            Console.ReadKey();

        }

    }

}

C++)(需要在.net Framework下才可使用。)

#include "stdafx.h"

 

using namespace System;

 

//排序,使用Array.Sort()函数,Powered By 思念天灵

int main(array<System::String ^> ^args)

{

     array<int>^myArray={ 22, 53, 72, 11, 34, 44, 11, 15, 28, 3, 10, 65 };

     Array::Sort(myArray);

     for(int i=0;i<12;i++)

     {

         Console::Write("{0},", myArray[i]);

     }

     Console::ReadKey();

    return 0;

}

J#

package SortClassJSharp;

import System.*;

/**

 * 排序,使用Array.Sort()函数,Powered By 思念天灵

 */

public class Program

{

     public static void main(String[] args)

     {

         int myArray[] = new int[] { 22, 53, 72, 11, 34, 44, 11, 15, 28, 3, 10, 65 };

         Array.Sort(myArray);

         for (int i = 0; i < 12; i++)

         {

              Console.Write(myArray[i] + ",");

         }

         Console.ReadKey();

     }

}

运行结果均相同,如图表1所示:


图表
1

JavaScript中也有相同的sort()函数,但因JavaScript只能用于网页上,故不在此讨论。

         微软MSDN上对System.Array.Sort的说明:“Array中的每个元素均必须实现 IComparable接口,才能与array 中的其他所有元素进行比较。如果排序不能成功地完成,则结果未定义。此方法使用QuickSort算法。此实现执行不稳定排序;亦即,如果两元素相等,则其顺序可能不被保留。相反,稳定排序保留相等元素的顺序。一般情况下,此方法的运算复杂度为O(n log n),其中narrayLength;最坏的情况下其运算复杂度为O(n 2)

结论:Array.Sort其内部使用了大数据量时效率最高的快速排序算法。C#实现的快速排序没有C++的快这一点原因很明显。Array.Sort效率是很高的,没有必要怀疑它,建议使用它。如排序自己的类:Array.Sort< Customer> ( customer, new CustomerComparer () ); //CustomerComparer 实现IComparer接口。(摘自论坛:ITPUB论坛)

         虽然,我们能够使用微软所提供的System.Array.Sort方法进行快速排序,但我们还需要对其他的排序方法进行了解,虽然这些排序方法可能没有微软提供的快速排序的效率高,但微软因注重这个类的兼容实用性,这样的接口算法效率高却因接口之间的类型转换和数据判断而损失了优秀算法的效率带来的优秀时效,有时候也可能因为空间可用性以及对大多数已排好顺序的序列进行排序,我们有必要了解其他一些排序方法。另外,排序方法虽然很多,但是其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合在不同的环境(如记录的初始排列状态等)下使用。

         下面,我将针对如下算法进行各算法和思想的简介以及程序示例。

         冒泡排序、交换排序、选择排序(简单选择排序、树形选择排序、堆排序)、插入排序(直接插入排序、希尔排序)、快速排序、归并排序、双向冒泡排序。
上一篇:没有了      下一篇多种排序算法,多种语言讲解(冒泡排序)
Tags:dreamlandcn.com 排序算法 VB C#
Google
关于我们 | 服务指南 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 诚征英才  | 友情链接
Powered by ACTCMS 2.0
Copyrights©2008-2009 蓝色湖畔 www.dreamlandcn.comAll Rights Reserved. 滇ICP备05000680号