关于sort排序的个人理解



例:用选择法对数组中10个整数按由小到大排序。

解题思路:
所谓选择法就是先将10个数中最小的数与a[0]对换,再将a[1]~a[9]中最小的数与a[1]对换······每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。
如下图:

a[0] a[1] a[2] a[3] a[4]
3 6 1 9 4
1 6 3 9 4
1 3 6 9 4
1 3 4 9 6
1 3 4 6 9

代码如下

#include<stdio.h>  
2.void sort(int a[],int n)  
3.{  
4.    int i,j,k,t;  
5.    for(i=0;i<n-1;i++)//因为i需与后面的元素比较,所以i最多是倒数第二个元素   
6.    {  
7.        k=i;  
8.        for(j=i+1;j<n;j++)//同上,j需与前面的元素比较,所以j最小为i后的第一个元素   
9.        {  
10.            if(a[j]<a[k]) k=j;  
11.        }  
12.        t=a[k];a[k]=a[i];a[i]=t;//注意此处只有i和k   
13.    }  
14.}  
15.  
16.int main()  
17.{  
18.    int s[10],i;  
19.    for(i=0;i<10;i++)  
20.        scanf("%d",&s[i]);  
21.    sort(s,10);  
22.    for(i=0;i<10;i++)  
23.        printf("%d ",s[i]);  
24.    printf("\n");  
25.    return 0;  
26.}  

初识sort排序:
一、把i的值赋予k,让k替i与j比较(为了不改变i的值);
二、① 如果a[k]大于a[i](此时a[k]即a[i]的值),则用k记录下j的值,即记录下需要与a[i]交换的元素的序号
②如果a[k]不大于a[i],此时不需交换故k不需记录下序号,此时k仍是i的值
三、交换:i变化的每轮都有a[i]与a[k]交换值的环节(即调用的sort函数中的最后一部分),如果是①条件下的k,则a[i]与此时k记录下序号的元素互换,a[i]换为两者的最小值;如果是②条件下的k,则k的值即是i的值,则交换后a[i]值仍为原值,即不互换。(综上:k是替死鬼???)

冒泡法:若是if (arr[j]< arr[j+1])  ,则数据从大到小排序,若是if(arr[j] > arr[j+1])  ,则数据从小到大排序。

选择法:若是if (arr[i] < arr[j])  ,则数据从大到小排序,若是if (arr[i] >arr[j])  ,则数据从小到大排序。

冒泡法与选择法:若有n个数据,则需进行n-1轮比较,第i轮需进行n-i次比较。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值