冒泡法排序pta,冒泡法排序c语言编写
冒泡排序法是如何排序的???
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
扩展资料:
举例:C语言
#includelt;stdio.hgt;
#define ARR_LEN 255/*数组长度上限*/
#define elemType int/*元素类型*/
/*冒泡排序*/
/*1.从当前元素起,向后依次比较每一对相邻元素,若逆序则交换*/
/*2.对所有元素均重复以上步骤,直至最后一个元素*/
/*elemType arr[]:排序目标数组;int len:元素个数*/
void bubbleSort(elemType arr[],int len){
elemType temp;
int i,j;
for(i=0;ilt;len-1;i++)/*外循环为排序趟数,len个数进行len-1趟*/
for(j=0;jlt;len-1-i;j++){/*内循环为每趟比较的次数,第i趟比较len-i次*/
if(arr[j]gt;arr[j+1]){/*相邻元素比较,若逆序则交换(升序为左大于右,降序反之)*/
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
int main(void){
elemType arr[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
int len=10;
int i;
bubbleSort(arr,len);
for(i=0;ilt;len;i++)
printf("%d\t",arri);
putchar('\n');
return 0;
}
参考资料:
百度百科——冒泡排序

以下冒泡排序的详解是什么?
AS为:functionarray_1(array){
for(varn=0;narray.length;n++){
for(varj=0;jarray.length-n;j++){
if(array[j]array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
for(vark=0;karray.length;k++){
trace(array[k]);
}
trace("");
}
}
my_array=newArray(0,2,3,9);
array_1(my_array);
冒泡法排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。
2.若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,......,第n-j个与第n+1-j个比较,共比较n-1次。此时第n+1-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。
3.第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较......。直到完成第n-1个数与第n个数的比较。
4.此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,......直到完成第n-2个数与第n-1个数的比较;......第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。
5.共n-1轮排序处理,第j轮进行n-j次比较和至多n-j次交换。从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。
C语言冒泡排序法是怎么排序的?
C语言冒泡排序法的排序规则:
将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
初始 R[1..n]为无序区。
第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。
即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].keyR[j].key,则交换R[j+1]和R[j]的内容。 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。
第二趟扫描 扫描R[2..n]。
扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上…… 最后,经过n-1 趟扫描可得到有序区R[1..n] 注意: 第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R上,结果是R[1..i]变为新的有序区。
c语言冒泡排序的编程为:
#include stdio.h
void sort(int *a,int len)
{int i=0;
int j;
int t;
for(i=0;ilen-1;i++)[1]
{
for(j=0;jlen-i-1;j++)
{
if(a[j]a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main(int argc, char *argv[])
{
int a[10]={
-999,2,3,77,12,88,0,-8,99,100
};
int i=0;
sort(a,10);
for(i=0;i10;i++)
{
printf("%d ",a[i]);
}
return 0;
}