选择排序------排序

选择排序的原理就是上图表示的内容。

老样子,我们还是举个例子:1 3 5 8

首先遍历元素,找到最大或者最小的元素,这里我选择最小的元素1,然后放到数组的一侧,可以放到左侧,也可以放到右侧,这里我放到右侧。然后数组变成8 3 5 1,然后继续遍历,继续找到最小的元素3,然后放到右侧最小元素的前一个位置,此时变成8 5 3 1,此时就排序完成了。原理很简单。上代码。同样的,你也可以在中间加个判断,如果已经排好序了,就可以停止了。代码为了照顾新手,就不那么复杂了,大家可以自己优化一下代码。

代码实现:

#include <stdio.h>
#include <stdlib.h>
int main(void) 
{
	int sz[] = {6,1,3,5,8,9,4,4,2};				//定义一个待排序的数组 
	int sz_len = sizeof(sz)/sizeof(sz[0]);		//求出数组长度 
	int i;
	int y_xb = sz_len-1;						//数组最右侧的下标 
	for(i = 1;i < sz_len;i++)					//开始排序,排序要进行的轮数 9个数,最多要排八次 
	{
		//用来找到最小的数,让这里我们选择最小的数,放到右侧
		int min_num = sz[0];							
		int min_numxb = 0;							//记录最小数的下标 
		//先遍历,找到最小的元素
		int j;
		for(j = 0;j <= y_xb;j++)					//y_xb是未排序的下标
		{
			if(min_num > sz[j])
			{
				min_num = sz[j];				//比min_num小,然后赋值 
				min_numxb = j;					//记录下标 
			}
		}
		//然后交换
		int temp = sz[y_xb];					//临时变量存放最右的元素 
		sz[y_xb] = sz[min_numxb]; 				//最右侧的元素换成最小元素 
		sz[min_numxb] = temp; 					//最小元素的位置存放最右侧的元素 
		y_xb --;								//然后最右侧下标--,变成倒数第二个,依次往下减少 
	}
	
	//打印看看
	int k;
	for(k = 0;k < sz_len;k++)				
	{
		printf("%d ",sz[k]);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值