×

冒泡排序法 排序 排序法

“冒泡排序法”是什么?什么叫做排序

admin admin 发表于2022-05-11 16:01:57 浏览130 评论0

抢沙发发表评论

“冒泡排序法”是什么

冒泡排序详细注释:/* 用冒泡排序法对一维整型数组中的十个数升序排序 */ #include 《stdio.h》 #include 《stdlib.h》int main() {int i,j,t,a; printf(“Please input 10 integers:\n“); for(i=0;i《10;i++) scanf(“%d“,&a[i]); for(i=0;i《9;i++) /* 冒泡法排序 */ for(j=0;j《10-i-1;j++) if(a[j]》a[j+1]) {t=a[j];/* 交换a[i]和a[j] */ a[j]=a[j+1]; a[j+1]=t; } printf(“The sequence after sort is:\n“); for(i=0;i《10;i++) printf(“%-5d“,a[i]); printf(“\n“); system(“pause“); return 0; } 其中i=0时: j从0开始a,a比较大小,把其中的较大者给a,然后j++,a和a再比较,再把两者中的 较大者给a,这样a,a,a中的最大者已经交换到a中,这个过程继续,直到j=10-i-1=9这样 a中的为10个数中的最大数。 然后i=1时: 由于最大数已找到并放到a中,所以这一次循环j最大只需到10-i-1=8,即a即可,再次从j=0开始a[j]和a[j+1]两两比较交换,最后次大数放到a中 然后i++,继续... 当i=9时已经过9次两两比较完成所有排序,i《9不再成立退出比较。 对于n个数,只需要进行n-1次外循环的两两比较就完成排序。 至于按降序排列只需将if(a[j]》a[j+1])改为if(a[j]《a[j+1])即可。 -------------------------------------------------------------------/* 用改进型冒泡排序法对一维整型数组中的十个数升序排序 */ #include 《stdio.h》 #include 《stdlib.h》int main() {int i,j,t,a,flag; printf(“Please input 10 integers:\n“); for(i=0;i《10;i++) scanf(“%d“,&a[i]); for(i=0;i《9;i++) /* 改进型冒泡法排序 */ { flag=0; for(j=0;j《10-i-1;j++) if(a[j]》a[j+1]) { t=a[j]; /* 交换a[i]和a[j] */ a[j]=a[j+1]; a[j+1]=t; flag=1; } if(flag==0)break; } printf(“The sequence after sort is:\n“); for(i=0;i《10;i++) printf(“%-5d“,a[i]); printf(“\n“); system(“pause“); return 0; } 这个和上面的实质一样,只是加了一个标志flag,当在一次大循环(即外层循环)内,在内层循环中如果 没有发生一次交换,那么就表示a《a《a《a《a《a《a《a《a《a,即数组已经排序完成,此时直接退出循环,不用再比较了。

什么叫做排序

排序是计算机的一种操作方法,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,主要分为内部排序和外部排序。 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。概念描述将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。常见排序算法快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。概述内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序和分配排序。其中,插入排序主要包括直接插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序主要包括气(冒)泡排序和快速排序。分类◆稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法是稳定的。其中冒泡,插入,基数,归并属于稳定排序,选择,快速,希尔,堆属于不稳定排序。◆就地排序:若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间为O(1),则称为就地排序。选择排序原理每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(很多教科书都说选择排序是不稳定的,但是,完全可以将其实现成稳定的排序方法)。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1..n],有序区为空。②第1趟排序在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。……③第i趟排序第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。优劣优点:移动数据的次数已知(n-1次);缺点:比较次数多,不稳定。

如何用二分法排序

public int binarySearch(int data,int aim){//以int数组为例,aim为需要查找的数 int start = 0; int end = data.length-1; int mid = (start+end)/2;//a while(data[mid]!=aim&&end》start){//如果data[mid]等于aim则死循环,所以排除 if(data[mid]》aim){ end = mid-1; }else if(data[mid]《aim){ start = mid+1; } mid = (start+end)/2;//b,注意a,b } return (data[mid]!=aim)?-1:mid;//返回结果 }