选择排序
#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)