当前位置: 首页 > news >正文

中国水土保持与生态环境建设网站/网络信息发布平台

中国水土保持与生态环境建设网站,网络信息发布平台,建设网络平台,网络公司+网站建设+小程序闲来无事&#xff0c;拿出数据结构的排序算法做一比较&#xff1a;第一种算法为选择排序&#xff0c;二为插入排序&#xff0c;三是冒泡排序&#xff0c;六是二分法插入排序&#xff0c;随机产生了10000个数字#include "stdafx.h"#include <iostream>#include …

闲来无事,拿出数据结构的排序算法做一比较:
第一种算法为选择排序,二为插入排序,三是冒泡排序,六是二分法插入排序,随机产生了10000个数字
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "stdlib.h"
#include "time.h"
using namespace std;
const int count = 10000;
const int SELECT = 1;
const int INSERT = 2;
const int BUBBLE = 3;
const int HEAP   = 4;
const int QUICK =  5;
const int BIINSERT =6;
void QuickSort(int a[],int start,int end)
{
    int i,j;

 if(start<end)
 {
  i = start;
  j = end;
     long lTemp = a[start];
  do
  {
     while(i<j&&lTemp<a[j]) j--;  //从最右开始找位置
     if(i<j)                                     //与左边交换后掉头
     {
      swap(a[j],a[i]);
      i++;
     }
     while(i<j&&a[i]<lTemp) i++; 从左边找
     if(i<j)
     {
      swap(a[j],a[i]);
      j--;
     }  
  } while(i<j);   //最终找到定位的地方
 a[i] = lTemp;  //元素放入,分成两个序列
 QuickSort(a,start,i-1);  //左边序列
 QuickSort(a,i+1,end); //右边序列
 }
}

void swap(int &a,long &b)
{
 long lTemp;
 lTemp = a;
 a = b;
 b = lTemp;
}
void sort(int a[],int count,int lMethod)
{
 switch(lMethod)
 {
 case SELECT:
  {
   //Selected Sort
   for(int i=0;i<count;i++)
   {
      for(int j = i+1;j<count;j++)
      {
       if(a[j]>a[i])
       {
      swap(a[j],a[i]); 
       }
      }
   }
  }
  break;
 case INSERT:  //Insert Sort
  {
   long lTemp;
   for(int i = 0;i<count;i++)
   {
    int j = i+1;
    long lTemp = a[j] ;  //
    while(j>0&&lTemp<a[j-1])
    {
     a[j] = a[j-1];
     j--;
    }
    a[j] = lTemp;
   }
  }
  break;
 case BUBBLE: //Bubble Sort
  {
             for(int i = 0;i< count;i++)
    {
     for(int j=i+1;j<count;j++)
     {
      if(a[j]<a[j-1])
      {
       long lTemp;
       lTemp = a[j];
       a[j]= a[j-1];
       a[j-1] = lTemp;
      }
     }
    }
  }
  break;
 case HEAP: //Heap Sort
  {

  }
  break;
 case QUICK: //Quick Sort
  {
          QuickSort(a,0,count-1); 
  }
  break;
 case BIINSERT:
  {
    long lTemp;
   for(int i = 0;i<count;i++)
   {
    int j = i+1;
    long lTemp = a[j] ;
    int k,m,n;
    m = 0;n = j;
    k = (m+n)/2;
    while(m<n)
    {
     if(lTemp>a[k])
      m = k+1;
     else
      n = k-1;
     k = (m+n)/2;
    }
    for(int L=j ; L>k ; L--)
    {
     a[L] = a[L-1];
    }
    a[L] = lTemp;
   }
        
  }
  break;
 }
}
int main(int argc, char* argv[])
{
 int a[count];
 int b[count];
  srand( (unsigned)time( NULL ) );
  long lNum = 0;
     for( int i = 0; i < count;i++ )
  {
  lNum = rand()%count;
  if(i%10==0)
   printf("\n");
     printf( " %6d", lNum );
  a[i] = lNum;
  b[i] = lNum;
  }
  printf("\n");
 long lStart = GetTickCount();
 sort(a,count,1);
 long lEnd = GetTickCount();
 cout<<"SELECT sort times= "<<( lEnd - lStart)<<"  uMinutes \n";

     for(  i = 0; i < count;i++ )
  {
  a[i] = b[i];
  } 

 lStart = GetTickCount();
 sort(a,count,2);
 lEnd = GetTickCount();
 cout<<"INSERTsort times= "<<( lEnd - lStart)<<"  uMinutes \n";

     for(  i = 0; i < count;i++ )
  {
  a[i] = b[i];
  } 
 lStart = GetTickCount();
 sort(a,count,3);
 lEnd = GetTickCount();
 cout<<"BUBBLE sort times= "<<( lEnd - lStart)<<"  uMinutes \n"; 
     for(  i = 0; i < count;i++ )
  {
  a[i] = b[i];
  } 
 lStart = GetTickCount();
 sort(a,count,6);
 lEnd = GetTickCount();
 cout<<"BIINSERT sort times= "<<( lEnd - lStart)<<"  uMinutes \n";
     for(  i = 0; i < count;i++ )
  {
  a[i] = b[i];
  } 
 lStart = GetTickCount();
 sort(a,count,5);
 lEnd = GetTickCount();
 cout<<"QUICK sort times= "<<( lEnd - lStart)<<"  uMinutes \n";
    for( int j = 0; j < count;j++ )
 {
//  if(j%10==0)
//   printf("\n");
//  printf( " %6d", a[j] );
 }
 return 0;
}

下面是测试结果:
一次:
SELECT sort times= 1078  uMinutes
INSERTsort times= 156  uMinutes
BUBBLE sort times= 438  uMinutes
BIINSERT sort times= 141  uMinutes
QUICK sort times= 0  uMinutes
二次:
SELECT sort times= 1047  uMinutes
INSERTsort times= 156  uMinutes
BUBBLE sort times= 453  uMinutes
BIINSERT sort times= 141  uMinutes
QUICK sort times= 0  uMinutes
三次:
SELECT sort times= 1063  uMinutes
INSERTsort times= 156  uMinutes
BUBBLE sort times= 437  uMinutes
BIINSERT sort times= 141  uMinutes
QUICK sort times= 15  uMinutes

从测试结果中可以看到,数据量大的时候,二分法插入排序的性能较好。快速排序最佳
冒泡排序由于是稳定的排序方法,排序性能适中,比较适合使用,当数据量大、不要求稳定排序时可以考虑二分法或快速,堆排序。
小数据量时用插入或冒泡排序就够了,针对随机数,通常不要使用选择排序。

转载于:https://www.cnblogs.com/lifeihost/archive/2005/11/28/286336.html

http://www.lbrq.cn/news/1116559.html

相关文章:

  • 做外贸网站需要注意些什么/宁德市教育局
  • html5电影网站建设/seo兼职工资一般多少
  • 哪个yy频道做天龙私服网站/制作一个简单的html网页
  • 网站搭建好有什么内容可以修改/广告竞价推广
  • 上海建设手机网站/百度推广教程视频教程
  • 青岛高端网站开发公司/武汉seo推广优化公司
  • 云南旅行社网站建设/微信群拉人的营销方法
  • 无锡seo网站推广/seo权威入门教程
  • 深圳微商城网站制作/西安网站建设哪家好
  • 网站建设流程总结/服装品牌策划方案
  • 找生意做去哪个网站/佛山seo教程
  • 个人中心页面/推广排名seo
  • 如何设置网站图标favicon.ico/镇江网站制作公司
  • 商业地产网站建设/石家庄网站优化
  • 日本产品和韩国产品哪个好/沈阳seo代理计费
  • 自建的电子网站如何做推广/百度百科优化
  • 秦皇岛做网站/广告投放怎么做
  • zz手表网站/seo排名优化收费
  • 青岛企业如何建网站/seo搜索是什么
  • 专做户外装备测评视频网站/seo sem是什么意思
  • 网站建设技术经费预算/全网网络营销
  • 做自动发货网站/长沙网络推广只选智投未来
  • 集团公司网站建设策划/google下载安卓版
  • 河南建设银行处理违章网站/搜索引擎推广与优化
  • 成品网站w灬源码1688网页版/阿里云建站费用
  • 广东广州电脑个人建站/看网站搜什么关键词
  • 清远专业网站建设/怎么在百度做宣传广告
  • 国内最大网站制作公司/百度seo 站长工具
  • 空间注册网站/百度关键词排名查询接口
  • 北京 个人网站 备案/品牌运营管理公司
  • vue中的this.$set
  • 【C++详解】STL-stack、queue的模拟实现,容器适配器,deque双端队列介绍
  • OpenCV中常用特征提取算法(SURF、ORB、SIFT和AKAZE)用法示例(C++和Python)
  • STM32 | 定时器 PWM 呼吸灯
  • Linux 环境下安装 Node.js v16.13.0 完整指南
  • SSM框架学习DI入门——day2