您的位置:首页 > 编程语言 > C语言/C++

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

2016-06-29 17:29 721 查看
//
//  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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息