8.选择排序——简单选择排序

选择排序包括简单选择排序、树形选择排序、堆排序。

选择排序中最简单的是简单选择排序。
本文针对简单选择排序。

 

原理是每次循环选择出后边序列中最小的数据并和前边的数据交换位置,直到循环到最后一个元素。

 

 

程序:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 50
#define N 15

typedef struct{
	int key;
	int other;
}node;

typedef struct
{
	node array[MAXSIZE + 1];
	int length;
}list;


//查询并返回后边的序列中最小数据的下标
int select_min(list *l,int i)
{
	int min;
	int j,position;
	
	position = i;
	min = l->array[i].key;
	for(j = i + 1;j <= l->length;j++)
		if(l->array[j].key < min){  //比较,得出最小的数据的下标
			position = j;
			min = l->array[j].key;
		}
	return position;
}

//简单选择排序
void simple_select_sort(list *l)
{
	int i,j;
	node temp;
	
	for(i = 1;i < l->length;++i){
		j = select_min(l,i);
		if(i != j){
			temp = l->array[i];
			l->array[i] = l->array[j];
			l->array[j] = temp;
		}
	}
}

//打印序列
void print(list *l)
{
	int i;
	
	for(i = 1;i <= l->length;i++)
		printf("%d %d\t",l->array[i].key,l->array[i].other);
	printf("\n");
}


void main()
{
	node data[N]={{5,6},{13,5},{22,2},{2,4},{6,5},{99,7},{6,15},{1,22},{15,12},{58,12},{48,40},{26,48},{38,35},{72,58},{61,22}};
	list l;
	int i;

	for(i = 0;i < N;i++)
    	l.array[i + 1] = data[i];
    l.length = N;
    
	printf("befor sort:\n");
	print(&l);
		
	simple_select_sort(&l);
	printf("after simple select sort:\n");
	print(&l);
}


 

结果:

[16:00:56]# ./c
befor sort:
5 6     13 5    22 2    2 4     6 5     99 7    6 15    1 22    15 12   58 12   48 40   26 48   38 35   72 58   61 22
after simple select sort:
1 22    2 4     5 6     6 5     6 15    13 5    15 12   22 2    26 48   38 35   48 40   58 12   61 22   72 58   99 7


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值