几种排序方法的实现

#include <iostream>
#include <stdio.h>

using namespace std;

//插入排序 
void insert_sort_increase(int *num, int size)
{
    int tmp = 0;
	int j = 0;
	for (int i = 1; i < size; i++)
	{
		if (num[i] < num[i-1])
		{
			tmp = num[i];
			for (j = i; j > 0 && tmp < num[j-1]; j-- )
			{
				num[j] = num[j-1];
			}
			num[j] = tmp;
		}
	}
}
//冒泡排序
void bubble_sort_increase(int *num, int size)
{
	int tmp;
	for (int i = 1; i < size; i++)
	{
		for (int j = 0; j < size-i; j++)
		{
			if (num[j]>num[j+1])
			{
				tmp = num[j];
				num[j] = num[j+1];
				num[j+1] = tmp;
			}
		}
	}
}
//选择排序
void select_sort_increase(int *num, int size)
{
	int tmp;
	int pos;

	for (int i = 1; i < size; i++)
	{
		tmp = num[i-1];
		pos = i-1;
		for (int j = i ; j < size; j++)
		{
			if (num[j] < tmp  )
			{
				tmp = num[j];
				pos = j;
			}
		}
		num[pos] = num[i-1];
		num[i-1] = tmp;
	}
}
//谢尔排序
void shell_sort_increase(int *num, int size)
{
	int tmp = 0;
	int j = 0;
	for (int gop = size/2; gop > 0; gop /=2)
	{
		for (int i = gop; i < size; i++)
		{
			tmp = num[i];
			for ( j = i; j >= gop && tmp<num[j-gop]; j -= gop)
			{
				num[j] = num[j-gop];
			}
			num[j] = tmp;
		}
	}
}

//快速排序
void quick_sort_increase(int *num, int left, int right)
{
	int l = left;
	int r = right;
    int tmp = num[l]; //选取第一个为驱轴

	while (l < r)
	{
		while(r > l && tmp <= num[r])
		{
			r--;
		}
		if (l < r)
		{
			num[l++] = num[r];
		}	
		while (r > l && tmp >= num[l])
		{
			l++;
		}
		if (l < r)
		{
			num[r--] = num[l];
		}	
	}

	num[l] = tmp;
	if(left < l-1)
	{
		quick_sort_increase(num, left, l-1);
	}
	if (r+1 < right)
	{
		quick_sort_increase(num, r+1, right);
	}

}
void quick_sort_increase(int *num, int size)
{
	quick_sort_increase(num,0, size-1);
}


int main()
{
	int num[10]={5,1,6,45,22,24,51,23,12,17};
	//insert_sort_increase(num, 10);
	//bubble_sort_increase(num, 10);
	//select_sort_increase(num, 10);
	//shell_sort_increase(num, 10);
	quick_sort_increase(num, 10);
	for (int i=0; i < 10; i++)
	{
		cout << num[i] << " ";
	}
	cout << endl << "*********************************************" << endl;


	getchar();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值