选择排序 :
思想:
每一轮把最小元素和未排序数组的第一个交换位置,直到全部排好序,最终为一个升序结果
代码展示:
#include <stdio.h>int main(void) {int i, j; // 循环变量int MinIndex; // 保存最小的值的下标int buf; // 互换数据时的临时变量int n;printf("你想输入多少个数据n:\n");scanf("%d",&n);int a[n];for(int k=0;k<n;k++){scanf("%d",&a[k]);}for (i = 0; i < n - 1; ++i) { // n个数比较n-1轮MinIndex = i;for (j = i + 1; j < n; ++j) { // 每轮比较n-1-i次,找本轮最小数的下标if (a[MinIndex] > a[j]) {MinIndex = j; // 保存小的数的下标}}if (MinIndex != i) {/* 找到最小数之后如果它的下标不是i则说明它不在最左边,互换位置 */buf = a[MinIndex];a[MinIndex] = a[i];a[i] = buf;}}printf("最终排序结果为:\n");for (i = 0; i < n; ++i) {printf("%d ", a[i]);}printf("\n");return 0;}
运行结果:
最好情况:输入的数据是完全排好序的,只需要遍历一趟就可以排好序,因此它的时间复杂度是O(n)
最坏情况:输入的数据是逆序的,复杂度为