C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)

//
//  main.cpp
//  TestC++
//
//  Created by luojuan on 16/3/28.
//  Copyright © 2016年 luojuan. All rights reserved.
//

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>

using namespace std;

int myArray[20];

//MARK:==============================冒泡排序==============================
void sort_bubble(int left,int right)
{
    if (left > right)
    {
        return;
    }
    
    int count=0;
    do
    {
        count=0;
        for (int j=left; j < right; j++)
        {
            if (myArray[j] > myArray[j+1])
            {
                count++;
                int change=myArray[j];
                myArray[j]=myArray[j+1];
                myArray[j+1]=change;
            }
        }
    } while ( count > 0);
}
//MARK:==============================快速排序==============================
void sort_quick(int left,int right)
{
    if (left > right)
    {
        return;
    }

    int i,j,temp;
    i=left;
    j=right;
    temp=myArray[left];

    while (i != j)
    {
        while (j > i && myArray[j] >= temp)
        {
            j--;
        }

        while (i < j && myArray[i] <= temp)
        {
            i++;
        }

        if (i < j)
        {
            int change=myArray[i];
            myArray[i]=myArray[j];
            myArray[j]=change;
        }
    }

    int change=myArray[i];
    myArray[i]=myArray[left];
    myArray[left]=change;

    sort_quick(left,i-1);
    sort_quick(i+1,right);
}
//MARK:==============================选择排序==============================
void sort_selection(int left,int right)
{
    if (left > right)
    {
        return;
    }
    
    int temp=left;
    while (temp < right)
    {
        int minNum=temp;
        for (int i=temp; i <= right; i++)
        {
            if (myArray[i] < myArray[minNum])
            {
                minNum=i;
            }
        }
        
        if (minNum != temp)
        {
            //替换
            int change=myArray[minNum];
            myArray[minNum]=myArray[temp];
            myArray[temp]=change;
        }
        temp++;
    }
}
//MARK:==============================插入排序==============================
void sort_insert(int left,int right)
{
    //默认0是已经排序好的
    int temp=left+1;
    while (temp <= right)
    {
        int num=myArray[temp];
        int insert=temp-1;
        while (myArray[insert] > num && insert >= left)
        {
            myArray[insert+1]=myArray[insert];
            insert--;
        }
        myArray[insert+1]=num;
        temp++;
    }
}
//MARK:==============================希尔排序==============================
void shell_sort(int length)
{
    //第一个增量
    int gap=length/2;
    while (gap >= 1)
    {
        for (int temp=gap; temp < length; temp++)
        {
            int i=temp-gap;
            int num=myArray[temp];
            while (i >= 0 && myArray[i] > num)
            {
                myArray[i+gap]=myArray[i];
                i-=gap;
            }
            myArray[i+gap]=num;
        }
        
        gap=gap/2;
    }
}


int main(int argc, const char * argv[])
{
    for (int i=0; i < 20; i++)
    {
        if (i%2 ==0)
        {
            myArray[i]=i*10;
        }
        else
        {
            myArray[i]=-i*10;
        }
    }
    
    shell_sort(20);
    
    for (int i=0; i < 20; i++)
    {
        cout <<myArray[i] << endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值