当前位置:  编程技术>c/c++/嵌入式

C++中的几种排序算法

    来源: 互联网  发布时间:2014-10-24

    本文导语:  SortAlgorithm.h 代码如下:#include using namespace std; class SortAlgorithm{public:    SortAlgorithm(int = 10);    void displayVector();    void swap(int &, int &);    void insertSort();                     //O(n^2)    void selectSort();          ...

SortAlgorithm.h

代码如下:

#include
using namespace std;

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;

};

SortAlgorithm.cpp

代码如下:

#include
#include // prototypes for functions srand and rand
#include // prototype for function time
#include // prototype for sort function
#include "SortAlgorithm.h" // class BinarySearch definition
using namespace std;

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 ])
      {
         swap( temp[ position ], temp[ right ] );
         position = right;
      } // end if
   //second: from left to right
      while ( 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


    
 
 

您可能感兴趣的文章:

  • C++ Lists(链表) 成员 sort():给list排序
  • C++实现顺序排序算法简单示例代码
  • C++选择排序算法实例
  • C++实现简单的希尔排序Shell Sort实例
  • c++冒泡排序示例分享
  • C++插入排序算法实例
  • C++冒泡排序算法实例
  • java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序) iis7站长之家
  • C++实现位图排序实例
  • 利用C++的基本算法实现十个数排序
  • C++堆排序算法的实现方法
  • C++实现数组的排序/插入重新排序/以及逆置操作详解
  • C++ 关于STL中sort()对struct排序的方法
  • C++ 冒泡排序数据结构、算法及改进算法
  • C++ 先对数组排序,在进行折半查找
  • 用位图排序无重复数据集实例代码(C++版)
  • C++快速排序的分析与优化详解
  • C++线性时间的排序算法分析
  • C++实现基数排序的方法详解
  • 基于C++实现的各种内部排序算法汇总
  • C++实现各种排序算法类汇总
  • <<大话数据结构>>中冒泡排序算法改进
  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
  • python算法学习之桶排序算法实例(分块排序)
  • 可视化算法排序过程 Sound of Sorting
  • 常用排序算法整理分享(快速排序算法、希尔排序)
  • C#排序算法之快速排序
  • 排序算法之PHP版快速排序、冒泡排序
  • 算法之排序算法的算法思想和使用场景总结
  • VC++实现选择排序算法简单示例
  • php冒泡排序算法实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • STL vector+sort排序和multiset/multimap排序比较
  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)
  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 问题:DefaulTableModel是否有排序的功能,如果没有,jTable如何排序,我是从XML取数据到Table里。
  • PHP快速排序小例子 php快速排序实现方法
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • 深入Java冒泡排序与选择排序的区别详解
  • C#中使用快速排序按文件创建时间将文件排序的源码
  • 用c语言实现冒泡排序,选择排序,快速排序
  • php数组随机排序示例
  • jQuery表格排序插件 tablesorter
  • jQuery排序工具 jQuery.sorted
  • 关于awk数组的排序
  • Eclipse文本排序插件 SortIt
  • linux中对文件排序的命令(文件夹中包含子文件)
  • 请问怎么用sort对多个字段进行排序?
  • ll 命令输出,使用sort排序问题
  • 堆排序算法(选择排序改进)
  • jQuery 表格排序插件 Stupid Table




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3