排序算法C++代码——快速排序

来源:互联网 发布:知乎小说推荐知乎言情 编辑:程序博客网 时间:2024/06/06 04:04

大家都说快排不太容易理解,我给大家简单讲一下。

不复制别人说的话了,自己按自己想的说,全是大白话哈哈:

  1. 第一次,设定范围为整体。
  2. 随机选个数,大于它的放右边,小于它的放左边。
  3. 设定范围为左边小于刚才随机数的范围,走步骤2,3,4.
  4. 设定范围为右边大于刚才随机数的范围,走步骤2,3,4.
  5. 若分不出左右边了,则完成排序。

 

#include <iostream>using namespace std;///////////////////////////////////////////////////////////////////////// /// @brief 快速排序/// @param[in] pTemp 原始序列/// @param[in] nNum 原始序列长度/// @param[out] 0:成功 1:失败///////////////////////////////////////////////////////////////////////// int quickSort( int*& pFaseSortData, int nStartIndex, int nEndIndex );void main(){//插入排序int nSize = 100;int* pFaseSortData = new int[nSize];for( int i = 0; i < nSize; i++ )pFaseSortData[i] = nSize - 1 - i;if( quickSort( pFaseSortData, 0, nSize - 1 ) == 0 )cout<<"快速排序完成!\n";elsecout<<"快速排序失败!\n";for( int i = 0; i < nSize; i++ )cout<<pFaseSortData[i]<<endl;delete[] pFaseSortData;}int quickSort( int*& pFaseSortData, int nStartIndex, int nEndIndex ){int i,j;i = nStartIndex;j = nEndIndex;if( ( pFaseSortData == NULL ) || ( ( nEndIndex - nStartIndex ) == 0 ) )return -1;while( i < j ){//拿第i个元素和第j个元素比较,若小,则减小j,然后再和j元素比较,若大,则两个数互换位置while( i < j && pFaseSortData[i] <= pFaseSortData[j] )j--;if( i < j ){                 int nTemp = pFaseSortData[i];pFaseSortData[i] = pFaseSortData[j];pFaseSortData[j] = nTemp;}//拿第i个元素和和第j个元素比较,若小,则增加i,然后再和j元素比较,若大,则互换位置。while( i < j && pFaseSortData[i] < pFaseSortData[j] )i++;if( i < j ){                 int nTemp = pFaseSortData[i];pFaseSortData[i] = pFaseSortData[j];pFaseSortData[j] = nTemp;}}//因为上边i==j才跳出,所以在此快排时,需要用0到i,i+1( 代码中(j+1)==(i+1) )到最后才快排了if( i - nStartIndex > 1 )quickSort( pFaseSortData, 0, i );//递归调用,把key前面的完成排序if( nEndIndex - j > 1 )quickSort( pFaseSortData, j + 1, nEndIndex );//递归调用,把key后面的完成排序return 0;}


原创粉丝点击