首页 > 编程知识 正文

内部排序算法比较c语言,实现二分查找算法c语言

时间:2023-05-06 00:20:39 阅读:141694 作者:4857

首先,介绍了选择排序的基本算法。

当n个元素需要排序时,首先从n个元素中找到最小的元素并与第0个位置的元素进行交换,然后从剩下的N-1个元素中找到最小的元素并与第1个位置的元素进行交换,然后从剩下的N-2个元素中找到最小的元素并与第2个位置的元素进行交换,……

如果按照从小到大的顺序排序,则a [5]={ 3,5,4,1,0 };

选择5个元素中最小的0,与a[0],即3交换,交换后的序列为{0、5、4、1、3}; 选择以下4个元素中最小的1,与a[1],即5交换,交换后的序列为{0、1、4、5、3}; 选择以下3个元素中最小的3,与a[2],即4交换,交换后的序列为{ 0,1,3,5,4 }; 选择以下两种元素中最小的4,与a[3],即5交换,交换后的序列为{ 0,1,3,4,5 }; 至此,a[5]的5个元素均按正序排列。

让我们总结一下算法是如何实现的:

首先,确定要与选择排序进行比较的循环数I。 如上所示,在每个回合的选择排序完成后,将添加一个已排序的元素。 5个元素比较4个环,4个元素已经有序,剩下的最后一个元素自然有序,需要比较n个元素的环数为n-1。 其次,决定每个回合的目标值的下标j,交换a[j]的值和a[i]的值。 第0次: a[0]按顺序与a[1]、a[2]、a[3]、a[4]进行比较,取出并更换a[0]、a[1]、a[2]、a[3]、a[4]中的最小值第一次: a[0]已经有序,无需再排序,a[1]依次与a[2]、a[3]、a[4]进行比较,在a[1]、a[2]、a[3]、a[4]中第三次: a[0]、a[1]已经有序,不需要再排序,依次比较a[2]和a[3]、a[4],取出a[2]、a[3]、a[4]中的最小值进行交换第三次: a[0]、a[1]、a[2]已经有序,所以不需要再排序,依次对a[3]和a[4]进行比较,取出a[3]、a[4]中的最小值进行交换。 从上面可以看出,j的开始值是i 1。 这是因为a[i 1]和随后的值需要与a[i]的值进行比较,并在满足条件下进行交换。 j的最大值为数组的最大下标n-1。

确定以上两个结论后,开始在代码中实现选择排序算法。

# includeiostreamusingnamespacestd; voidselectsort(int*a,int len ) for ) intI=0; ilen-1; //i控制排序的回合数,每个回合被排序的要素{int min=a[i],min_flag=i,temp; /*注意:每次此处的内层循环结束时,必须将min重置为a[i],并将min_flag(flag记录中的最小值下标)设置为I。 这是为了避免执行内层循环中的if语句,而min_flag保留上次内层循环时的j值,因为某次的a[i]值已经是最大值; j () /循环未排序序列,最小值(if(a[j]min )//加上最小值和最小值下标) {min=a[j]; min_flag=j; }}temp=a[i]; 交换a[i]和min值的a[i]=min; a[min_flag]=temp; }}int main () inta [ 10 ]={ 2,7,1,9,0,4,3,6,5,8 }; intlen=sizeof(a )/sizeof (int ); 选择(a,len ); for(intI=0; ilen; I ) {couta[i] '; }return 0; )得到正序排列的值:0 1 2 3 4 5 6 7 8 9。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。