选择法排序与冒泡排序分而治之
选择法排序
先找出一组数中的最大值
#include <stdio.h> void main() { int a[10]={34,56,27,87,65,92,-3,76,21,99}; int max; int i,t; for(i=0;i<10;i++) { max=a[0]; for(i=0;i<10;i++) { if(a[i]>max) { max=a[i]; } } } printf("%d",max); }
将最大值放到初始位置
逐渐找出10个数,9个数,8个数——中的最大值,并将其放在剩余数组第一位
#include <stdio.h> // 选择排序函数 void selectionSort(int arr[], int n) { int i, j, minIndex, temp; // 外层循环:控制排序趟数 (共 n-1 趟) for (i = 0; i < n - 1; i++) { // 假设当前起始点 i 是最小值的下标 minIndex = i; // 内层循环:在未排序部分中找到最小值的下标 for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; // 更新最小值的下标 } } // 将找到的最小值与当前起始点交换 if (minIndex != i) { temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } int main() { int arr[100], n, i; // 输入数组大小 printf("请输入数组元素个数: "); scanf("%d", &n); // 输入数组元素 printf("请输入 %d 个整数:\n", n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } // 调用选择排序函数 selectionSort(arr, n); // 输出排序结果 printf("排序后的数组为:\n"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
#include <stdio.h> int main() { int n,i; int a[10]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } int j,max_j,t; for(i=0;i<n;i++) { max_j=i; for(j=i;j<n;j++) { if(a[j]>a[max_j]) { max_j=j; } } t=a[i]; a[i]=a[max_j]; a[max_j]=t; } printf("%d",a[0]); for(i=1;i<n;i++) { printf(" %d",a[i]); } return 0; }
小作业小作业 文章被收录于专栏
小作业,姑且叫做操作步骤超过5步的作业吧