基本信息
文件名称:计算机软件技术编程基础-排序.pptx
文件大小:6.8 MB
总页数:10 页
更新时间:2025-06-02
总字数:约7.42千字
文档摘要

基本排序技术

排序是将一个无序序列整理成非递减顺序排列的有序序列。

Kp?≤Kp?≤Kp?≤…≤Kpn

稳定排序:排序过程中,相同关键字的元素的相对次序不变。

不稳定排序:排序过程中,相同关键字的元素的相对次序发生变化。

例如:34,12,34`,08,96

08,12,34,34`,96稳定

08,12,34`,34,96不稳定

一交换排序

比较两个待排序纪录的关键字,若为逆序则相互交换位置,否则,保持原来位置不变。冒泡排序、快速排序

1冒泡排序

基本思想:

从前往后扫描,逐个比较相邻的两个元素,发现倒序即交换—一直到将第N-1个纪录和第N个记录交换为止。

原序列51

7

3

1

6

9

4

2

8

6

15

3

1

6

7

4

2

8

6

9

关键字最大的安置到最后

从后往前扫描,将第N-1个纪录和前一个关键字进行比较,将小的放在前面,大的放在后面,依次类推,直到第2个记录和第1个记录交换为止。

11532674689

1531674269

关键字最小的安置到最前面

对线性表的每次来回操作都将最大的沉到表底,最小的像气泡冒到表头。

11234566789

11

53267468

9

11325646789

11234566789

113789

25646

对剩余的线性表重复操作

11

325646

789

1531674286

9

11

53267468

9

012345678910

11234566789

51731694286

待排数组数组长度

voidbub(intp[],intn)

{

intm,k,j,i;

intd;

k=0;m=n-1;//初始时子表表头k和表尾m位置while(km)//子表未空,依次比较相邻纪录

{

j=m-1;m=0;

{

return;

for(i=k;i=j;i++)

if(p[i]p[i+1])

{d=p[i];p[i]=p[i+1];p[i+1]=d;m=i;}

j=k+1;k=0;

for(i=m;i=j;i--)

if(p[i-1]p[i])

{d=p[i];p[i]=p[i-1];p[i-1]=d;k=i;}

while(km)//子表未空,依次比较相邻纪录

{

j=m-1;m=0;//如果-扫描无交换,表尾置0

fori(f(;i];[;])[1-]+,;;}沉底

//m为该趟冒泡后子表表尾的位置

j=k+1;k=0;//如果-扫描无交换,表头置0

fori(fii]i];;-[[i]])[-]-;-,1;[}]冒泡

//k为该趟冒泡后子表表头的位置

}

;

1

i

-

k

p

d

[i

p

i

p

//

i

-

p

p

i

i

]

m

[m+

[i

;p

]

j

p

i

{

i

算法分析:

稳定

时间代价:

需要进行比较的次数为

2快速排序

1)从无序表中选取一个元素T,对线性表进行分割,大于T的元素放在前表中,小于T的元素放在后表中。此时,线性表分成前后两个子表;

2)对分割的