`
luozhong915127
  • 浏览: 188786 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论
阅读更多

排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,究竟各有什么特点呢?本文力图设计实现常用内部排序算法并进行比较。分别为起泡排序,直接插入排序,简单选择排序,快速排序,堆排序,针对关键字的比较次数和移动次数进行测试比较。

 

  问题分析和总体设计

 

ADT OrderableList

{

          

数据对象:D={ai| aiIntegerSet,i=1,2,,n,n0}

          

数据关系:R1={ai-1ai|ai-1, aiD, i=1,2,,n}

 

1、起泡排序

 

   算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目。当找到这两个项目后,交换项目的位置然后继续扫描。重复上面的操作直到所有的项目都按顺序排好。

//冒泡排序函数

void bsort::bubblesort(double *y, int m)

{

   for(i=(m-1);i>0;i--)

   {

       flag=0;

       for(j=1;j<=i;j++)

       {

           if(y[j-1]>y[j])

           {

              temp=y[j-1];

              y[j-1]=y[j];

              y[j]=temp;

              flag=1;

           }

       if(flag==0) break;           

       }                

                      

   }

 

 

2、直接插入排序

 

算法:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。要达到这个目的,我们可以用顺序比较的方法。首先比较L[i]L[i-1],如果L[i-1] L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]L[i-1]的位置,继续比较L[i-1]L[i-2],直到找到某一个位置j(1ji-1),使得L[j] L[j+1]时为止。

//插入排序函数

void isort::insertion_sort(double *x, int m)

{

   for(i=1;i<m;i++)

   {

      temp=x[i];

      j=i;

      while((j>0)&&(x[j-1]>temp))

      {

          x[j]=x[j-1];

          j--;

      }

      x[j]=temp;

                      

   }   

 

3、简单选择排序

 

  算法:首先找到数据清单中的最小的数据,然后将这个数据同第一个数据交换位置;接下来找第二小的数据,再将其同第二个数据交换位置,以此类推。

//shell排序函数

void ssort::shell_sort(double *x, int m)

{

   h=3;

   while(h>0)

   {

     

       for(i=1;i<m;i++)

       {

          temp=x[i];

          j=i;

          while((j>=h)&&(x[j-h]>temp))

         {

          cout<<"排序成功"<<endl;                          

          x[j]=x[j-h];

          j-=h;

         }

         x[j]=temp;

                      

      }

      if((h/2)!=0) {h/=2;}

      else if(h==1) {h=0;}

      else{h=1;}

   }   

 

 

4、快速排序

 

  算法:首先检查数据列表中的数据数,如果小于两个,则直接退出程序。如果有超过两个以上的数据,就选择一个分割点将数据分成两个部分,小于分割点的数据放在一组,其余的放在另一组,然后分别对两组数据排序。通常分割点的数据是随机选取的。这样无论你的数据是否已被排列过,你所分割成的两个字列表的大小是差不多的。而只要两个子列表的大小差不多。

//快速排序函数

void quicksort1::quicksort(double *x, int left, int right)

{

   l_h=left;

   r_h=right;

   pivot=x[left];

   while(left<right)

   {

       while((x[right]>=pivot)&&(left<right))

       {

          right--;  

       }

       if(left!=right)

       {

          x[left]=x[right];

          left++;

       }

       while((x[right]<=pivot)&&(left<right))

       {

          left++;  

       }

       if(left!=right)

       {

          x[right]=x[left];

          right--;

       } 

      

   }

   x[left]=pivot;

   pivot_loc=left;

   left=l_h;

   right=r_h;

   if(left<pivot_loc){quicksort(x, left, (pivot_loc-1));} 

   if(right>pivot_loc){quicksort(x,(pivot_loc+1),right);}

}

3
2
分享到:
评论

相关推荐

    几种常见排序算法代码

    几种常见的排序算法是编程领域中基础且重要的知识点,它们各自有不同的特点和适用场景。本文将详细介绍这些算法,并分析其效率。 一、冒泡排序 冒泡排序是一种简单的排序算法,通过不断交换相邻的两个元素来逐步...

    c++几种常用的数字排序方法

    本文将深入探讨几种常见的数字排序方法,包括直接插入法、Shell排序、冒泡排序、快速排序以及选择排序。这些排序方法各有特点,适用于不同的场景,理解并掌握它们对于提升编程技能至关重要。 **1. 直接插入排序...

    javascript 的几种排序方法

    这篇文章将详细介绍JavaScript中几种常见的排序方法,帮助你更好地理解和运用这些技术。 首先,最基本的排序方法是`Array.prototype.sort()`。这个内置函数可以接受一个比较函数作为参数,用于自定义排序规则。例如...

    用php实现几种常见的排序算法共6页.pdf.zip

    这份资料"用php实现几种常见的排序算法共6页.pdf.zip"显然包含了关于如何使用PHP实现几种常见排序算法的教程或笔记。 首先,让我们回顾一下几种常见的排序算法,并讨论它们在PHP中的实现: 1. **冒泡排序**...

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

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

    常用排序PK 冒泡 快排 选择排序 基数排序 等

    本文将详细解析几种常见的排序算法:冒泡排序、快速排序、选择排序以及基数排序,并探讨它们的工作原理、效率和适用场景。 **冒泡排序**: 冒泡排序是一种简单直观的排序算法,通过比较相邻元素并交换位置来实现...

    算法特性和基本概念、五个重要的特征、复杂性、六种常用多项式时间算法、各种排序算法比较选择、算法优化的几种常用方法和常用算法分析

    ### 算法优化的几种常用方法 1. **循环展开**:通过减少循环迭代次数来减少循环开销。 2. **空间换时间**:预先计算结果并存储起来,以避免重复计算。 3. **缓存优化**:通过调整数据访问模式,提高缓存命中率。 4....

    常用排序比较(直接插入,选择,堆排序,冒泡)

    本篇文章将深入探讨几种常见的排序算法:直接插入排序、选择排序、冒泡排序以及堆排序,并给出它们的具体代码实现。 #### 直接插入排序 **基本思想**:直接插入排序的基本思想是将一个记录插入到已排序好的有序表...

    java基础常用排序算法

    在这个主题中,我们将深入探讨几种常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序以及堆排序。 **1. 冒泡排序(Bubble Sort)** 冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列...

    个人写的几个排序算法

    这里我们主要探讨的是由个人编写的几种排序算法实现,包括插入排序、冒泡排序、选择排序、堆排序、快速排序和基数排序,全部用C++语言完成。这些算法各有特点,适用于不同的场景。 1. 插入排序:插入排序是一种简单...

    快速排序和直接插入排序的组合

    快速排序和直接插入排序是两种常见的排序算法,它们各自具有不同的特性和应用场景。在实际编程中,有时会根据数据特点和需求将这两种排序方法结合使用,以达到更高效的排序效果。 快速排序是一种由C.A.R. Hoare在...

    java 常见排序算法的实现 包括二叉树

    本文将详细介绍几种常见的排序算法及其Java实现,同时也会涉及二叉树的基本概念和实现。 首先,让我们从最简单的排序算法开始。冒泡排序是一种基础的交换排序方法,它通过重复遍历待排序的数组,依次比较相邻元素并...

    数据结构排序.rar

    这里我们主要讨论的是在数据结构中的几种常见排序方法,包括插入排序、冒泡排序、快速排序以及与二分法相关的排序策略。 1. 插入排序: 插入排序是一种简单直观的排序算法,它的工作原理类似于打扑克牌。初始时,...

    数据结构排序汇总

    程序中实现了几种常见的排序算法,包括冒泡排序、快速排序、插入排序、选择排序以及希尔排序。 #### 3.1 冒泡排序 `BubbleSort` 函数实现了冒泡排序算法,通过不断交换相邻的两个元素来实现排序。 ```c void ...

    用Java语言实现的各种排序

    本文将详细介绍用Java语言实现的几种常见排序算法,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序和堆排序。这些算法各有特点,适用于不同的场景,了解它们可以帮助我们更好地理解和优化代码...

    常用排序算法分析与实现(Java版)

    本文将深入探讨几种常见的排序算法,并提供它们的Java实现,旨在帮助开发者提升算法理解和应用能力。 首先,我们从最基础的排序算法——冒泡排序开始。冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换...

    易语言数组排序算法集合

    下面将详细介绍其中提及的几种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过重复遍历待排序的数组,比较相邻元素并交换顺序,使较大的元素逐渐“冒”到数组的末尾。其主要步骤是:比较相邻...

    C语言教学中常用排序方法分析.pdf

    本文将深入分析几种常见的排序方法,并为学习者提供专业指导。 首先,我们来探讨最基本的排序算法——冒泡排序。冒泡排序通过不断交换相邻的错误顺序元素来实现排序,其核心是重复地遍历要排序的数列,一次比较两个...

Global site tag (gtag.js) - Google Analytics