• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中的几种排序算法

C++中的几种排序算法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++排序算法,快速排序算法c++,c++冒泡排序算法,c++插入排序算法,c++归并排序算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

SortAlgorithm.h

class SortAlgorithm
{
public:
    SortAlgorithm(int = 10);
    void displayVector();
    void swap(int &, int &);

    void insertSort();                     //O(n^2)
    void selectSort();                    //O(n^2)
    void mergeSort();                    //O(n log n)
    void bubbleSort();                  //O(n^2)
    void quickSort(  int , int  );     //worst: O(n^2),  best: O(n log n)

    int partition( int , int  );
    void sortSubVector(int , int );
    void merge(int , int , int , int );
private:
    int size;
    vector< int > source;
    vector< int > temp;

};
</div>

SortAlgorithm.cpp

SortAlgorithm::SortAlgorithm(int vectorSize)
{
    size = ( vectorSize > 0 ? vectorSize : 10 ); // validate vectorSize
    srand( time( 0 ) ); // seed using current time

   // fill vector with random ints in range 10-99
    for ( int i = 0; i < size; i++ )
           source.push_back( 10 + rand() % 90 ); // 10-99

    temp = source;
}

void SortAlgorithm::insertSort()
{
    int insert;
    for(int next = 1; next < size; next++){
        insert = temp[next];
        int moveItem = next;

        while((moveItem > 0) && (temp[moveItem - 1] > insert)){
            temp[moveItem] = temp[moveItem - 1];
            moveItem--;
        }

        temp[moveItem] = insert;
    }
}

void SortAlgorithm::selectSort()
{
    int loop = size - 1;
    int smallest;

    for(int i = 0; i < loop; i++){
        smallest = i;

        for(int j = i + 1; j < size; j++){
            if(temp[j] < temp[smallest])
                smallest = j;
        }

        swap(temp[i], temp[smallest]);
    }
}

void SortAlgorithm::mergeSort()
{
    sortSubVector(0, size - 1);
}

void SortAlgorithm::bubbleSort()
{
       int comp; // used to control for loop and for subscripts
       bool swapCheck = true; // was a swap made?

    for ( int pass = 1; pass < size && swapCheck; pass++ ) {
        swapCheck = false; // assume no swaps will be made

      // traverse and compare unsorted part of vector
        for ( comp = 0; comp < size - pass; comp++ ){

         // compare adjacent vector elements
            if ( temp[ comp ] > temp[ comp + 1 ] ) {
                swap(temp[comp], temp[comp + 1]);
                swapCheck = true;
                 } // end if

        } // end inner for
    } // end outer for
}

void SortAlgorithm::quickSort(int first, int last )
{
   int currentLocation;

   if ( first >= last )
      return;

   currentLocation = partition( first, last ); // place an element
   quickSort( first, currentLocation - 1 ); // sort left side
   quickSort( currentLocation + 1, last ); // sort right side
} // end function quickSortHelper

// partition the vector into multiple sections
int SortAlgorithm::partition( int left, int right )
{
   int position = left;

   // loop through the portion of the vector
   while ( true )
   {
   //first: from right ro left
      while ( temp[ position ] <= temp[ right ] && position != right )
         --right;

      if ( position == right )
         return position;

      if ( temp[ position ] > temp[ right ])
      {
         swap( temp[ position ], temp[ right ] );
         position = right;
      } // end if
   //second: from left to right
      while ( temp[ left ] <= temp[ position ] && left != position )
         ++left;

      if ( position == left )
         return position;

      if ( temp[ left ] > temp[ position ] )
      {
         swap( temp[ position ], temp[ left ] );
         position = left;
      } // end if
   } // end while
} // end function partition

void SortAlgorithm::sortSubVector(int low, int high)
{
    if((high - low) >= 1){
        int middle1 = (low + high) / 2;
        int middle2 = middle1 + 1;

        /*cout << "split:   ";
        displaySubVect

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c++ 快速排序算法【过程图解】
  • C++算法之在无序数组中选择第k小个数的实现方法
  • C C++ 算法实例大全
  • c++中八大排序算法
  • 详细总结C++的排序算法
  • 简单掌握桶排序算法及C++版的代码实现
  • C++三色球问题描述与算法分析
  • C++德州扑克的核心规则算法
  • C++中十种内部排序算法的比较分析
  • C++实现N个骰子的点数算法

相关文章

  • 2017-05-28MFC扩展DLL中导出类和对话框的实现方法
  • 2017-05-28C++如何实现简单的计时器详解
  • 2017-05-28关于《C和指针》的学习笔记
  • 2017-05-28VC小技巧汇总之5则实用小技巧
  • 2017-05-28二叉搜索树源码分享
  • 2017-05-28C++破坏MBR的代码
  • 2017-05-28C语言 变量详解及示例代码
  • 2017-05-28MFC设置对话框焦点的方法简述
  • 2017-05-28C基础 redis缓存访问详解
  • 2017-05-28浅谈C语言编程中程序的一些基本的编写优化技巧

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用C实现PHP扩展 Image_Tool 图片常用处理工具类的使用
    • C++实现迷宫算法实例解析
    • C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析
    • C++实现单链表删除倒数第k个节点的方法
    • C++从文本文件读取数据到vector中的方法
    • C++中的哈希容器unordered_map使用示例
    • C++设计模式之装饰模式
    • C++中的extern声明变量详解
    • 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
    • 浅析C语言中的内存布局

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有