c++排序算法(快速排序、冒泡排序、选择排序)

c++排序算法(快速排序、冒泡排序、选择排序),第1张

1——快速排序,这里的容器是全局的,不全局的话,可以在参数那里加个数组的参数传进来。

从大到小:

//从大到小排序
void ResManage::quickSortLastUpdateTime(const int iLeftIndex, const int iRightIndex)
{
    int iTempElement = m_qlTempRes.value(iLeftIndex).iLastUpdateTime; //暂存基准数
    int iTempLeftIndex = iLeftIndex;//最左位置
    int iTempRightIndex = iRightIndex;//最右位置

    if(iLeftIndex > iRightIndex) //递归结束条件
    {
        return;
    }

    while (iTempLeftIndex != iTempRightIndex) //当iTempLeft和iTempRight不重合时
    {
        while(m_qlTempRes.value(iTempRightIndex).iLastUpdateTime <= iTempElement
              && iTempLeftIndex < iTempRightIndex)//从右往左寻找大于基准数的值
        {
            iTempRightIndex--;
        }
        while(m_qlTempRes.value(iTempLeftIndex).iLastUpdateTime >= iTempElement
              && iTempLeftIndex < iTempRightIndex)//从左往右寻找小于基准数的值
        {
            iTempLeftIndex++;
        }      
        if(iTempLeftIndex < iTempRightIndex)
        {
            //找到了且i

原理:从序列的两端开始
(1)首先将最左边的数值作为基准数,应用2个变量iTempLeftIndex和iTempRightIndex

分别指向序列左端和右端;
(2)首先从iTempLeftIndex左往右寻找一个小于基准数的数,iTempRightIndex从右往左寻找一个大于2的数;

如果是从小到大的排序,就从左边往右找大于基数的数,从右边往左找小于基数的数。为什么这样,大家换个角度想想我们最后是要交换iTempLeftIndex、iTempRightIndex的值就可以想通了。
(3)找到了之后进行第一次交换,继续搜索;
(5)当iTempLeftIndex和iTempRightIndex都到了同一个位置后,表明第一轮交换结束,将基准数和iTempLeftIndex上的值进行交换,此时以iTempLeftIndex位置为分界线,左边的值都是大于iTempLeftIndex位置上的值,右边的值都是小于iTempLeftIndex上的值。

(6)最后调用递归分别处理左边序列和右边序列即可。

2——冒泡排序:从小打大

算法的思想:其实就是把每个值都和数组里面的值进行一遍比较(相邻位置)。

比如第一次循环:第一个值依次和后面值进行比较,比较完之后,最后一个位置的值一定是最大的。

第二次循环:第一个值依次和后面n-1个值进行比较,同理,比较完换值之后,倒数第二个位置的值是第二大的。

依次这样即可。

void bubbleSort(int a[], int n)
{
    for(int i =0 ; i< n-1; ++i)
    {
        for(int j = 0; j < n-i-1; ++j)
        {
            if(a[j] > a[j+1])//从大到小的话,这里换成小于就可以了
            {
                int tmp = a[j] ; //交换
                a[j] = a[j+1] ;
                a[j+1] = tmp;
            }
        }
    }
}

3——选择排序

void selestSort(int a[],int n)
{
    int iMinIdex=0;//假设这个位置上的值就是最小的
    int temp;
    for(int i=0;i

思想:分成两列,未排序和已排序,第一次选出最小或最大的值放在排序的一边,下次在未排序的队列中找出最小或最大的值放入已排序的一边,如此循环即可。

4——插入排序的思想:

从第一个元素开始,该元素可以认为已经被排序

取出下一个元素,在已经排序的元素序列中从后向前扫描

如果该元素(已排序)大于新元素,将该元素移到下一位置,

重复步骤,直到找到已排序的元素小于或者等于新元素的位置

将新元素插入到该位置后

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1353502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)