- 39
- 0
- 约1.57万字
- 约 67页
- 2017-09-19 发布于河南
- 举报
排序找到
2006-7-30
hhm
排序和查找初步
镇海中学 贺洪鸣
dennis-he@
2006-7-30
hhm
目录
交换排序
选择排序
插入排序
冒泡排序
快速排序
几个例子
堆排序
二分查找
2006-7-30
hhm
问题描述
将输入的n个整数,从小到大排列后,依次输出。
1≤n≤1000的算法?
1≤n≤100000的算法?
2006-7-30
hhm
交换排序
排序思想
1.在a[2]至a[n]中依次找小于a[1]者,和a[1]交换; //a[1]为a[1]至a[n]中最小
2.在a[3]至a[n]中依次找小于a[2]者,与a[2]交换; //a[2]为a[2]至a[n]中最小
… …
3.在a[i+1]至a[n]中依次找小于a[i]者,与a[i]交换; //a[i]为a[i]至a[n]中最小
… …
4.在a[n]至a[n]中依次找小于a[n-1]者,与a[n-1]交换; //a[n-1]为a[n-1]至a[n]中最小
交换排序算法
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]a[i] then
交换a[i] 和 a[j]
时间复杂性:O(n2)
O(n2)的比较和O(n2)的交换
(1)最简单,最不易犯错,
(2)当n=1000时推荐使用.
2006-7-30
hhm
选择排序
排序思想
1.在a[1]至a[n]中找最小的a[k],交换a[1]和a[k]; //a[1]成为a[1]至a[n]中最小
2.在a[2]至a[n]中找最小的a[k],交换a[2]与a[k]; //a[2]成为a[2]至a[n]中最小
… … …
3.在a[i]至a[n]中找最小的a[k],交换a[i]与a[k]; //a[i]成为a[i]至a[n]中最小
… … …
4.在a[n-1]至a[n]中找最小的a[k],交换a[n-1]与a[k]; //a[n-1]成为a[n-1]至a[n]中最小
选择排序算法
for i:=1 to n-1 do begin
k:=i;//以下三句找a[i]至a[n]中最小者a[k];
for j:=i+1 to n do
if a[j]a[k] then k:=j;
交换a[i]和a[k];
end;
时间复杂性:
(1)O(n2)的比较和O(n)的交换
(2)比交换排序易犯错,当n=1000时适用.
插入排序
排序思想:
假如a[1],a[2],…,a[i-1]已经排好序,我们按以下方法将a[1]至a[i]排好序
(1)保存a[i]:t←a[i];
(2)if a[i-1]t,则a[i] ←a[i-1];
(3)if a[i-2]t,则a[i-1] ←a[i-2];
… … …
(4)if a[j+1]t,则a[j+2] ← a[j+1];
(5)if a[j]=t,则a[j+1] ←t;
hhm
插入排序算法
1. 输入待排序的数字个数n;
2. 输入n个数字;
3. for i←2 to n do begin//在前i-1个数已有序的情况下,使前i个数有序
4. t←a[i]; //保存a[i]至变量t中
5. j←i-1;
while (j=1) 且 (a[j]t) do begin
a[j+1]←a[j]; //a[j]移至a[j+1]
8. j←j-1;
9. end;
10. a[j+1]←t;
11.end;
12.输出a[1..n]
hhm
插入排序算法的时间复杂性
最好情况下,n个元素一开始就是升序排好的。此时,只要作n-1次的元素间比较,0次元素的移动
最坏情况下,n个元素一开始就是降序排好的。此时,要作n(n-1)/2次的元素间比较, n(n-1)/2次元素的移动
此算法的时间复杂性为O(n2)的。
我的实验表明,插入排序算法一般总是比交换和选择排序快。
hhm
冒泡排序
排序思想:
1.第1大的“沉至”a[n]:依次比较a[1]和a[2],
a[2]与a[3],…,a[n-1]与a[n],逆序则交换;
2.第2大的“沉至”a[n-1]:依次比较a[1]与a[2]
a[2]与a[3],…,a[n-2]与a[n-1],逆序则交换;
… … …
3.第i大“沉至”a[n-i+1]:依次比较a[1]与a[2],
a[2]与a[3],…,a[n-i]与a[n-i+1],逆序则交换
… … …
2.第n-1大的“沉至”a[2]:比较a[1]与a[2],逆序则交换;
原创力文档

文档评论(0)