1.前言2.实现3.总结4.更新日志
1.前言较为简单,在实现过程中不断地进行,选择一个元素,并与后面的所有元素依次比较
2.实现在未排序序列中找到最小(大)元素,放到起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
#include3.总结#include #include #define NUM 7 #define swap(a,b) {int t=a;a=b;b=t;} //宏定义交换函数 //void SelectionSort1(int* a) //选择排序1 //{ // int i, j; // for (i = 0; i < NUM - 1; i++) // { // for (j = i + 1; j < NUM; j++) // { // if (a[i] > a[j]) // swap(a[i], a[j]); // } // } //} void SelectionSort2(int* a) //选择排序2 { int i, j; for (i = 0; i < NUM - 1; i++) { int temp = i; for (j = i + 1; j < NUM; j++) if (a[temp] > a[j]) //找到最小值 temp = j; //记录 swap(a[temp], a[i]); //交换 } } int main() { srand((unsigned int)time(NULL)); //设置随机种子 (time的返回类型为size_t) int a[NUM]; int i; for (i = 0; i < NUM; i++) a[i] = rand() % 100; for (i = 0; i < NUM; i++) printf("排序前: %d ", a[i]); //SelectionSort1(a); //选择排序1 SelectionSort2(a); //选择排序2 printf("n"); for (i = 0; i < NUM; i++) printf("排序后: %d ", a[i]); return 0; }
时间复杂度为 O(n²)
但不用占据额外的空间
2022.2.06 整理上传(C)
欢迎交流、指正、补充、讨论~



