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

来源:互联网 发布:手机怎么开通淘宝贷款 编辑:程序博客网 时间:2024/05/21 06:12
////  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;}

0 0