【C】选择排序

选择排序动画.gif
void sort(int *p,int n){
    int i,j,k,t;
    //i是左边界 j是向右移动的选择器 k是最值
    for (i=0;i<n-1;i++){
        for (k=i,j=i+1;j<n;j++){
            if (*(p+j)<*(p+k)){
                k=j;
            }
        }
        if (k!=i){
            t=*(p+i);
            *(p+i)=*(p+k);
            *(p+k)=t;
        }
    }
    return;
}

GPT的解释

函数定义:

  • void sort(int *p, int n): 这是一个没有返回值的函数,参数包括:
    • int *p:指向要排序的整数数组的指针。
    • int n:数组的长度。

变量说明:

  • i:表示当前的循环索引(也就是选择排序中的左边界)。
  • j:从i+1开始向右移动,用来遍历未排序部分。
  • k:用于记录当前未排序部分中的最小值的索引。
  • t:用于存储临时变量,交换数组元素时使用。

代码分析:

  1. 外层循环 (for (i=0; i<n-1; i++)):
    • i从0开始,每次循环代表选择未排序部分中的最小值,并将其放在位置i
    • i会不断递增,表示每次循环后,前i+1个元素已经排好序。
  2. 内层循环 (for (k=i, j=i+1; j<n; j++)):
    • k=i:假设当前i位置是未排序部分的最小值。
    • j=i+1ji+1开始,向后遍历剩余的元素,查找比k位置元素更小的值。
    • if (*(p+j) < *(p+k)):如果当前元素比k位置的元素更小,则更新kj,表示找到了新的最小值。
  3. 元素交换
    • if (k != i):如果k不等于i,表示找到了比i位置元素更小的元素,进行交换:
      • t = *(p+i):将i位置的元素保存到临时变量t中。
      • *(p+i) = *(p+k):将k位置的最小值赋给i位置。
      • *(p+k) = t:将原来的i位置的值放到k位置。
  4. 函数返回
    • 排序结束后,函数通过return返回,没有返回值。

运行过程举例:

假设输入数组为[4, 2, 9, 6],函数按以下步骤排序:

  • 第1次:i=0,从未排序部分[4, 2, 9, 6]中找到最小值2,与位置0的4交换,数组变为[2, 4, 9, 6]
  • 第2次:i=1,从未排序部分[4, 9, 6]中最小值是4,不需要交换,数组不变。
  • 第3次:i=2,从未排序部分[9, 6]中找到最小值6,与9交换,数组变为[2, 4, 6, 9]
  • 数组已经有序。
© 版权声明
THE END
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容