个人代码笔记2——选择排序

(1)思路:(假如升序排序)把第一个元素设为基准元素,遍历剩余未排元素,如果未排元素random<基准元素base,则二者换位。此时ramdom作为当前min,继续遍历未与base比较过的元素,与min进行比较与交换。即找到最终的MIN并置首位。同样的方法进行第二轮排序,第二位元素作为基准元素,寻找剩余元素的MIN,并换位排在第二位继续遍历、比较、交换.....即不断寻找未排元素的最小值,并依次排序

(2)重点:for循环是重点。假设有n位数据,arr[i]作为基准元素,0≤i≤n-1;i不断后移,最远到达倒数第二位。arr[j]作为未排序元素,要不断后移遍历并与arr[i]比较。因此一开始比较,arr[j]总是在arr[i]的下一位,即n+1≤j≤n。j随着i变换,因此i在外层循环,j在内层

(3)特点:运行时间与输入无关(有序无序)、数据移动次数少,不稳定(遇相同元素,会破坏结构)

//选择排序
void sort_func2(int *arr,int length)
{
     for(int i = 1; i<length; i++)//i代表轮次,跟基准元素有关
    {
        for(int j = i; j<length; j++)
        {   
            if(arr[i-1]>arr[j])
            {
                int temp = arr[i-1];
                arr[i-1] = arr[j];
                arr[j] = temp;
                //break;
            }
        }
    }
}
int main()
{
    int arr[8] = {9,3,1,5,8,2,2,6};

    //strlen只能计算字符串的长度
    //char *str = "wdxwqfefe5";
    //printf("strlen=%d\n",strlen((const char *)arr));
    //printf("strlen=%d\n",sizeof(arr)/sizeof(int));
    //printf("strlen=%d\n",strlen(str));

    int length = sizeof(arr)/sizeof(int);
    sort_func2(arr,length);
    for(int i = 0; i<length; i++)
    {
        printf("%d  ",arr[i]);
    }
    printf("\n");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值