C语言选择排序-直接选择排序法

题:

在这里插入图片描述

C代码:

#include<stdio.h>
#define N 8
int main(){
	int r[N]={25,36,48,65,25,12,43,57};
	int i,j,flag,temp;
	for(i=0;i<N;i++){//共n-1趟排序
	flag=i;//flag保存排序吗最小记录的下标,初值为i flag=0
	  for(j=i+1;j<N;j++){//第i趟,经过n-i次比较选出最小的记录
	    if(r[j]<r[flag]){
	    	flag=j;
		}			
      }	
      	if(flag!=i){//将排序码最小的记录放到子区间的第一个位置
		 temp=r[i];//交换
		 r[i]=r[flag];
		 r[flag]=temp;
		}
	}
	//排序好输出结果
	for(i=0;i<N;i++){
		printf("%d ",r[i]);		
	}
	return 0;
}

运算结果:

在这里插入图片描述

*时间复杂度*:无论n个待排序记录的初始状态如何,在第i趟排序过程中,都要经过n-i次比较
才能选出排序码最小的记录,平均时间复杂度为O(n2) 
*空间复杂度*:只需要一个用于交换记录的辅助空间,所以直接选择排序的空间复杂度为O(1)
*稳定性*:不稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值