c语言中,什么是起泡法

Python016

c语言中,什么是起泡法,第1张

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

冒泡法我是这样理解的,便于掌握和记忆。首先冒泡是n长度的数组开始的两位开始,逐位双双比较一直到最后两个,所以最外循环比较了n-1次。第一个数比较了以后就不比了,从第二个开始,一直比较到数组末尾,于是内循环的起始位置不同,每次都是外侧i的值加0,也就是i。但结束的限制和外层循环是相同的。于是写法为for

(i=0i<n-1i++)

{

for(j=ij<n-1j++)

直接插入排序的基本思想是:

当插入第i

(i≥

1)

个对象时,前面的V[0],

V[1],

…,

v[i-1]已经排好序。这时,用v[i]的关键码与v[i-1],

v[i-2],

…的关键码顺序进行比较,找到插入位置即将v[i]插入,原来位置上的对象向后顺移。

用c实现的插入排序法,先输入10个数,然后利用插入排序法进行排序,将结果输出。

#include

"stdio.h"

#include

"conio.h"

main()

{

int

a[10],r[11]

int

*p

int

i,j

for(i=0i<10i++)

{

p=&a[i]

printf("please

scan

the

NO:

%d\n",i)

scanf("%d",p)

r[i+1]=a[i]

}

r[0]=1

for(i=2i<=10i++)

{

r[0]=r[i]

j=i-1

while(r[j]>r[0])

{

r[j+1]=r[j]

j--

}

r[j+1]=r[0]

}

for(i=1i<=10i++)

{p=&r[i]printf("form

min

to

max

the

NO:

%d

value=%d\n",i,*p)}

getch()

}

起泡排序:需反复比较相邻两个数的比较与交换这两种基本操作。对相邻的两个数进行比较时,如果反面的数大于(或小于)前面的数,将这两个数进行交换,大的数(小的数)往前冒。

void

Sort(a,n)

/*排序*/

{

float

a[]

int

n

{

int

i

int

flag

float

t

do{

flag=0

for(i=0i<=n-2i++)

if(a[i+1]>a[i])

{

t=a[i]a[i]=a[i+1]a[i+1]=t

flag=1

}

}while(flag)

}