排序算法(二)

不稳定的排序算法

简单选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列最前,直到全部待排序的数据元素排完。

void selectSort(int *data , int size = SIZE)
{
	int outpost=0;
	int k=0;
	for(int i=0;i<size;i++)
	{
		k = i;
		outpost = data[k];
		for(int j=i+1;j<size;j++)
		{
			if(outpost>data[j])
			{
				k = j;
				outpost = data[k];
			}
		}
		if(i!=k)
			swap(data[i],data[k]);
	}
}
快排(非随机)

快速排序是对起泡排序的一种改进。基本思想是,通过一趟排序将待排序记录分割成三部分,其中支点为K,一段中任何元素都小于K,一段中任何元素都大于K,递归求解对这两段执行快速排序。

void quickSort(int arr[],int p,int r)
{
	if(p<r)
	{
		int q = partition(arr,p,r);
		quickSort(arr,p,q-1);
		quickSort(arr,q+1,r);
	}
}
int partition(int arr[],int p,int r)
{
	int i = p;int j = r+1;
	int m = arr[p];
	while(true)
	{
		while(arr[++i]<m&&i<r);
		while(arr[--j]>m);
		if(i>=j)
			break;
		swap(arr[i],arr[j]);
	}
	arr[p] = arr[j];
	arr[j] = m;
	return j;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值