算法 - 选择排序


选择排序


#include <stdio.h>
#include <stdlib.h>
int findSmallest(int *arr, int len){
	int smallest = arr[0];
	int smallest_index = 0;
	for(int i =1;i < len;i++){
		if(arr[i] < smallest){
			smallest = arr[i];
			smallest_index = i;
		}	
	}
	return smallest_index;
}

int *selectionSort(int *arr, int len) {
	int *newArr = (int *)malloc(len * sizeof(int));
	//新建一个数组
	//辨析:
	//malloc(sizeof(int))表示您正在堆外分配空间来存储int, 将保留int所需的字节数
	//malloc(sizeof(int*))表示您正在堆外分配空间以存储指向的指针int,您正在保留指针所需的字节数, 将返回强制转换为的值, 指向的指针int
	//(int *)malloc(sizeof(int))与第一个调用完全相同,但结果显式转换为指向的指针int, 即保留int所需的字节数的空间但是是由指针指向的这个空间 
	for (int i = 0; i < len; i++) {
		int smallest = findSmallest(arr, len);
		newArr[i] = arr[smallest];
		
		arr[smallest] = INT_MAX;
		//emmm, 不清楚, 大概是防止溢出的意思 ?
		//INT_MAX = 2147483647 
	}
	return newArr;
}

int main(void) {
	int arr[] = {5, 3, 6, 2, 10};
	int len = sizeof(arr) / sizeof(arr[0]); //len的值为5, myList字节长度为20, 其中 myList[0]字节长度为4, 故而可得len值 
	int *sortarr = selectionSort(arr, len);
	for (int i = 0; i < len; i++) {
		printf("%d ", sortarr[i]);
	}
	return 0;
}
  • 选择排序算法时间复杂度: O(n^2)
  • 大致思路:
    寻找最小值函数, O(n)
    无序数据导入至新建数组遍历为有序数据, O(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值