1、冒泡排序和选择排序的比较冒泡排序和选择排序的比较1234a0a1a2a32134第一次比较第一次比较第二次比较第二次比较2314a0、a1、 a2、 a3分别两两比较并分别两两比较并交换,使小数沉底到交换,使小数沉底到a3第三次比较第三次比较2341第一趟冒泡结果第一趟冒泡结果1234a0a1a2a3比较前:比较前:第一趟冒泡,小数沉底到第一趟冒泡,小数沉底到a32341第一趟冒泡结果第一趟冒泡结果for(i=0;i+;i3)if(aiai+1) temp=ai; ai=ai+1; ai+1=temp;实现一趟冒泡的代码为:实现一趟冒泡的代码为:2341a0a1a2a33241第一次比较第一次
2、比较第二次比较第二次比较a0、a1、 a2 分别两两比较交换,小分别两两比较交换,小数沉底到数沉底到a23421第二趟冒泡结果第二趟冒泡结果2341a0a1a2a3比较前:比较前:第二趟冒泡,小数沉底到第二趟冒泡,小数沉底到a23421第二趟冒泡结果第二趟冒泡结果for(i=0;i+;i2)if(aiai+1) temp=ai; ai=ai+1; ai+1=temp;实现第二趟冒泡的代码为:实现第二趟冒泡的代码为:3421a0a1a2a3比较前:比较前:a0、a1两两比较并交换,小数沉底到两两比较并交换,小数沉底到a14321第三趟冒泡结果第三趟冒泡结果3421a0a1a2a3比较前:比较前:
3、第三趟冒泡,小数沉底到第三趟冒泡,小数沉底到a14321第三趟比较结果第三趟比较结果for(i=0;i+;i1)if(aiai+1) temp=ai; ai=ai+1; ai+1=temp;实现第三趟冒泡的代码为:实现第三趟冒泡的代码为:for(j=0;j3;j+)1234a0a1a2a3冒泡排序前:冒泡排序前:冒泡排序实现由小到大排序代码冒泡排序实现由小到大排序代码4321冒泡排序后:冒泡排序后:for(i=0;i+;i3-j)if(aiai+1) temp=ai; ai=ai+1; ai+1=temp;4个数排序,需个数排序,需要执行要执行3趟冒泡。趟冒泡。每一趟冒泡,需每一趟冒泡,需要数
4、据进行两两要数据进行两两比较并交换。比较并交换。选择排序选择排序n个数排序,需要进行个数排序,需要进行n-1趟选择趟选择过程为:过程为:令令max表示最大元素的序号(初值表示最大元素的序号(初值max=0),),a0到到a3逐一比较,找出最大元素的位置,逐一比较,找出最大元素的位置,a0与其互换,使最与其互换,使最大值位于大值位于a0。1234a0a1a2a3第一次比较第一次比较max=1第一趟:从第一趟:从4个元素中选出最大者,将其个元素中选出最大者,将其换入换入a0中中4231第一趟选择结果第一趟选择结果1234第二次比较第二次比较max=21234第三次比较第三次比较max=31234a
5、0a1a2a3比较前:比较前:第一趟选择,大数换到第一趟选择,大数换到a0中,只交换中,只交换一次一次第一趟选择结果第一趟选择结果 max=0; for (j=1;j4;j+) if (amaxaj) max=j; temp=a0; a0=amax; amax=temp;实现一趟选择的代码为:实现一趟选择的代码为:4231过程为:过程为:令令max表示最大元素的序号(初值表示最大元素的序号(初值max=1),),a1到到a3逐一比较,找出最大元素的位置,逐一比较,找出最大元素的位置,a1与其互换,使最与其互换,使最大值位于大值位于a1。4231a0a1a2a3第一次比较第一次比较max=2第二
6、趟:从第二趟:从3个元素中选出最大者,将其个元素中选出最大者,将其换入换入a1中中4321第二趟选择结果第二趟选择结果4231第二次比较第二次比较max=24231a0a1a2a3比较前:比较前:第二趟选择,大数换到第二趟选择,大数换到a1中,只交换中,只交换一次一次第二趟选择结果第二趟选择结果 max=1; for (j=2;j4;j+) if (amaxaj) max=j; temp=a1; a1=amax; amax=temp;实现第二趟选择的代码为:实现第二趟选择的代码为:4321过程为:过程为:令令max表示最大元素的序号(初值表示最大元素的序号(初值max=2),),a2到到a3逐
7、一比较,找出最大元素的位置,逐一比较,找出最大元素的位置,a2与其互换,使最与其互换,使最大值位于大值位于a2。4321a0a1a2a3第一次比较第一次比较max=2第三趟:从第三趟:从2个元素中选出最大者,将其个元素中选出最大者,将其换入换入a2中中4321第三趟选择结果第三趟选择结果4321a0a1a2a3比较前:比较前:第三趟选择,大数换到第三趟选择,大数换到a2中,只交换中,只交换一次一次第三趟选择结果第三趟选择结果 max=2; for (j=3;j4;j+) if (amaxaj) max=j; temp=a2; a2=amax; amax=temp;实现第三趟选择的代码为:实现第
8、三趟选择的代码为:4321for(i=0;i3;i+)1234a0a1a2a3选择排序前:选择排序前:选择排序实现由大到小排序代码选择排序实现由大到小排序代码4321选择排序后:选择排序后: max=i; for (j=i+1;j4;j+) if (amaxaj) max=j; temp=ai; ai=amax; amax=temp;4个数排序,需个数排序,需要执行要执行3趟选择。趟选择。每一趟选择,需每一趟选择,需要数据进行两两要数据进行两两比较,只交换比较,只交换1次。次。for (i=0;i4;i+) max=i; for (j=i+1;j4;j+) if (amaxaj) max=j; temp=ai; ai=amax; amax=temp;