选择排序介绍
- 一趟排序记录最小的数,放到第一个位置(升序找最小,降序找最大)
- 再一趟排序记录列表无序区最小的数,放到第二个位置
- ……
- 算法关键:有序区和无序区、无序区最小数的位置
- 时间复杂度:O(n^2)
- 暂时不可以像冒泡排序一样在某一趟循环没有发生交换时进行优化
#include<stdio.h> void Print(int li[], int n) { int i = 0; for (i = 0; i < n; i++) { printf("%d ", li[i]); } printf("\n"); } void select_sort(int li[], int n) { int i = 0; int j = 0; Print(li, n);// 验证 for (i = 0; i < n - 1; i++)// i是第i趟 { //在剩下的[i,n-1]的无序区找到最小的数,放到li[i]交换 int min_loc = i;// 无序区最小元素的下标,初始时默认i是无序区[i,n-1]中最小的元素 for (j = i + 1; j < n; j++) { if (li[j] < li[min_loc])// 升序找最小,降序找最大 { min_loc = j; } } //交换 int tmp = li[i]; li[i] = li[min_loc]; li[min_loc] = tmp; Print(li, n);// 验证 } Print(li, n);// 验证 } int main() { int li[] = { 3,4,2,1,5,6,8,7,9 }; int n = sizeof(li) / sizeof(li[0]); select_sort(li, n); return 0; }
选择排序(Select Sort)
最新推荐文章于 2024-09-15 18:27:07 发布