亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中的幾種排序算法

2020-01-26 15:36:26
字體:
來源:轉載
供稿:網友

SortAlgorithm.h

復制代碼 代碼如下:

#include <vector>
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 <iostream>
#include <cstdlib> // prototypes for functions srand and rand
#include <ctime> // prototype for function time
#include <algorithm> // 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 ] && 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:   ";
        displaySubVector(low, high);
        cout << endl << "       ";
        displaySubVector(low, middle1);
        cout << endl << "       ";
        displaySubVector(middle2, high);
        cout << endl << endl;*/

        sortSubVector(low, middle1);
        //cout << "Stop here1. low = " << low << ", middle1 = " << middle1 << endl;
        sortSubVector(middle2, high);
        //cout << "Stop here2. middle2 = " << middle2 << ", high = " << high << endl;

        merge(low, middle1, middle2, high);

    }
}

void SortAlgorithm::merge(int left, int middle1, int middle2, int right)
{
    int leftIndex = left;
    int rightIndex = middle2;
    int combinedIndex = left;
    vector<int> combined(size);

    /*cout << "merge:   ";
    displaySubVector(left, middle1);
    cout << endl << "       ";
    displaySubVector(middle2, right);
    cout << endl;*/

    while(leftIndex <= middle1 && rightIndex <= right){
        if(temp[leftIndex] <= temp[rightIndex])
            combined[combinedIndex++] = temp[leftIndex++];
        else
            combined[combinedIndex++] = temp[rightIndex++];
    }

    if(leftIndex == middle2){
        while(rightIndex <= right)
            combined[combinedIndex++] = temp[rightIndex++];
    }
    else{
        while(leftIndex <= middle1)
            combined[combinedIndex++] = temp[leftIndex++];
    }

    for(int i = left; i <= right; i++)
        temp[i] = combined[i];

    /*cout << "       ";
    displaySubVector(left, right);
    cout << endl << endl;*/
}

void SortAlgorithm::swap(int &x, int &y)
{
    int t;

    t = x;
    x = y;
    y = t;
}

void SortAlgorithm::displayVector()
{
    for(int i = 0; i < size; i++){
        cout << " " << temp[i];
        if((i + 1) % 10 == 0)
            cout << endl;
    }

    cout << endl;

    temp = source;
}

main.cpp

復制代碼 代碼如下:

#include <iostream>
#include "SortAlgorithm.h" // class BinarySearch definition
#include "BucketSort.h"
using namespace std;

int main()
{
    int num;
    cout << "Please input the integer number you want to sort:  ";
    cin >> num;

    SortAlgorithm sortVector(num);
    cout << "Unsort elements: /n";
    sortVector.displayVector();

    sortVector.insertSort();
    cout << "/nInsert sorted elements: /n";
    sortVector.displayVector();

    sortVector.selectSort();
    cout << "/nSelect sorted elements: /n";
    sortVector.displayVector();

    sortVector.mergeSort();
    cout << "/nMerge sorted elements: /n";
    sortVector.displayVector();

    sortVector.bubbleSort();
    cout << "/nBubble sorted elements: /n";
    sortVector.displayVector();

    sortVector.quickSort(0, num - 1);
    cout << "/nQuick sorted elements: /n";
    sortVector.displayVector();

   /*BucketSort bucketSortVector( num ); // create BucketSort object

   cout << "Vector elements in original order:/n";
   bucketSortVector.displayElements();

   bucketSortVector.sort(); // sort the vector

   cout << "/nVector elements in sorted order:/n";
   bucketSortVector.displayElements();*/
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品h版在线观看| 欧美精品国产精品日韩精品| 在线观看日韩视频| 国产mv免费观看入口亚洲| 色哟哟亚洲精品一区二区| 成人免费视频在线观看超级碰| 久久亚洲精品国产亚洲老地址| 原创国产精品91| 精品国产乱码久久久久久婷婷| 97精品免费视频| 国产成人在线一区二区| 97精品国产97久久久久久免费| 亚洲欧美一区二区精品久久久| 久久久久久久久国产精品| 日韩欧美在线看| 亚洲国产欧美一区二区三区同亚洲| 国产aaa精品| 国产不卡av在线| 国产男人精品视频| 97人洗澡人人免费公开视频碰碰碰| 欧美成人在线免费视频| 国产精品自拍视频| 国产精品h片在线播放| 国产在线高清精品| 欧美激情第1页| 欧美性xxxxx极品娇小| 亚洲精品免费一区二区三区| 国产精品久久久久久久9999| 91青草视频久久| 亚洲美腿欧美激情另类| 欧美性生活大片免费观看网址| 日韩少妇与小伙激情| 亚洲美女自拍视频| 国产成人在线亚洲欧美| 亚洲在线视频福利| 欧美又大又硬又粗bbbbb| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产有码在线一区二区视频| 欧美激情一二区| 91黑丝在线观看| 亚洲第一区中文99精品| 成人黄色网免费| 97视频在线观看免费| 热久久视久久精品18亚洲精品| 国产精品吊钟奶在线| 国产精品麻豆va在线播放| 亚洲国产日韩欧美在线图片| 久久精品国产综合| 亚洲人成网站色ww在线| 亚洲天堂久久av| 韩剧1988免费观看全集| 中文一区二区视频| 成人在线播放av| 最新亚洲国产精品| 国产日韩欧美在线看| 日韩经典一区二区三区| 欧美成年人网站| 久久久亚洲福利精品午夜| 人人做人人澡人人爽欧美| 中文字幕日韩精品在线| 日韩成人在线视频观看| 日韩av网站在线| 亚洲欧美中文日韩在线v日本| 啪一啪鲁一鲁2019在线视频| 精品国产91久久久久久老师| 亚洲美女久久久| 成人免费xxxxx在线观看| 国产精品美女av| 久久中文字幕视频| 欧美精品国产精品日韩精品| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美日韩一区二区三区在线| 亚洲精品日韩在线| 亚洲精品少妇网址| 欧美国产日韩视频| 亚洲va欧美va国产综合剧情| 亚洲国产精品电影在线观看| 久久国产精品亚洲| 另类图片亚洲另类| 亚洲欧美精品伊人久久| 中文字幕久久久| 欧美激情网站在线观看| 亚洲欧洲在线观看| 欧美日韩亚洲一区二区| 九九视频直播综合网| 国内精久久久久久久久久人| 亚洲欧洲一区二区三区在线观看| 亚洲精品91美女久久久久久久| 国产精品美女免费| 久久久久久久久久久免费| 国产精品自拍偷拍视频| 亚洲天堂av综合网| 97在线免费观看| 国产精品久久久久久久app| 亚洲精品小视频| 成人黄色片在线| 国产欧美精品一区二区三区介绍| 亚洲第一区在线观看| 亚洲一区二区日本| 欧美又大又硬又粗bbbbb| 成人免费观看网址| 最近2019中文字幕一页二页| 日本精品免费观看| 亚洲人成在线免费观看| 久久精品美女视频网站| 自拍偷拍亚洲一区| 国产成人激情小视频| 日韩中文字幕免费视频| 欧美性猛交xxxx免费看漫画| 亚洲成人久久一区| 欧美一乱一性一交一视频| 91极品女神在线| 欧美在线视频导航| 欧美日韩国产成人在线观看| 国产精品中文字幕久久久| 日韩va亚洲va欧洲va国产| 国产精品99久久久久久人| 久久免费精品日本久久中文字幕| 欧美激情喷水视频| 97av视频在线| 欧美一级视频在线观看| 亚洲视频网站在线观看| 亚洲综合精品伊人久久| 亚洲精品免费在线视频| 国产日韩欧美在线播放| 日韩av大片在线| 久久99亚洲热视| 亚洲精品电影在线| 国产亚洲人成a一在线v站| 91啪国产在线| 日韩中文字幕精品视频| 亚洲综合国产精品| 欧美精品videossex性护士| 日韩亚洲国产中文字幕| 日韩欧美精品中文字幕| 日韩视频在线免费| 中文字幕无线精品亚洲乱码一区| 最近中文字幕mv在线一区二区三区四区| 中文字幕欧美国内| 久久久噜噜噜久久久| 亚洲天堂av在线免费| 国产精品久久久久久久av大片| 91高潮在线观看| 国产精品视频午夜| 欧美日韩视频免费播放| 在线精品91av| 日韩黄色高清视频| 九九精品在线观看| 成人福利视频在线观看| 国产精品久久久久久婷婷天堂| 亚洲国产日韩一区| 91禁国产网站| 欧美日韩免费在线| 欧美视频一区二区三区…| 国产日韩欧美日韩大片| 国产综合在线观看视频| 日韩欧美一区二区三区| 性欧美xxxx交| 久久精品久久久久久国产 免费| 日韩av黄色在线观看| 久久精品国产久精国产一老狼| 亚洲人成五月天| 日韩欧美在线观看| 欧美成人四级hd版|