排序找到.pptxVIP

  • 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)

1亿VIP精品文档

相关文档