1、江苏省锡山高级中学 信息技术教研组,排序,1、排序的功能:将一个数据元素(或记录)的任意序列,重新排成一个按关键字有序的序列。 2、排序过程的组成步骤: 首先比较两个关键字的大小; 再将关键字从一个位置移动到另一个位置。,江苏省锡山高级中学 信息技术教研组,思想:首先从1n个元素中选出关键字最小的记录交换到第一个位置上。然后再从第2个到第n个元素中选出次小的记录交换到第二个位置上,依次类推。,选择排序,江苏省锡山高级中学 信息技术教研组,待排元素序列:53 27 36 15 69 42第一趟排序: 15 53 36 27 69 42第二趟排序: 15 27 53 36 69 42第三趟排序:
2、15 27 36 53 69 42第四趟排序: 15 27 36 42 69 53第五趟排序: 15 27 36 42 53 69,从小到大排序,i:确定第i个位置 j:第i个位置后面的数据下标,江苏省锡山高级中学 信息技术教研组,选择排序程序,program xzpx; const n=7; var a:array1n of integer; i,j, temp:integer; begin write(Enter data:); for i:=1 to n do read(ai); for i:=1 to n-1 do for j:=i+1 to n do if aiaj then beg
3、intemp:=ai;ai:=aj;aj:=temp; end; write(output data:); for i:= 1 to n do write(ai, ); End.,从小到大排序,江苏省锡山高级中学 信息技术教研组,(改进)选择排序程序,program xzpx; const n=7; var a:array1n of integer; i,j,k,temp:integer; begin write(Enter data:); for i:=1 to n do read(ai); for i:=1 to n-1 do begin k:=i; for j:=i+1 to n do
4、if aji then begin temp:=ai;ai:=ak;ak:=temp;end; end; write(output data:); for i:= 1 to n do write(ai, ); End.,江苏省锡山高级中学 信息技术教研组,冒泡排序(起泡排序) 基本思想:小的浮起,大的沉底。 第一趟:第1个与第2个比较,大则交换;第2个与第3个比较, 大则交换,关键字最大的记录交换到最后一个位置上; 第二趟:对前n-1个记录进行同样的操作,关键字次大的记录交换到第n-1个位置上;依次类推,则完成排序。,江苏省锡山高级中学 信息技术教研组,待排元素序列:53 27 36 15 6
5、9 42第一趟排序: 27 36 15 53 42 69第二趟排序: 27 36 15 42 53 69第三趟排序: 27 15 36 42 53 69第四趟排序: 15 27 36 42 53 69第五趟排序: 15 27 36 42 53 69,从小到大排序,i:确定趟数 j:每趟两两比较的数据下标,从左向右冒,江苏省锡山高级中学 信息技术教研组,program mppx; const n=7; var a:array1n of integer; i,j,temp:integer; begin write(Enter data:); for i:= 1 to n do read(ai);
6、for i:=1 to n -1 do for j:=1 to n-i do if ajaj+1 then begin temp:=aj;aj:=aj+1;aj+1:=temp end; write(output data:); for i:= 1 to n do write(ai:6); writeln; end.,冒泡排序程序,从小到大排序,该程序从左向右冒泡, 如果从右向左冒泡,程序如何修改?,江苏省锡山高级中学 信息技术教研组,插入排序,基本思想:从数组的第2号元素开始,顺序从数组中取出元素,并将该元素插入到其左端已排好序的数组的适当位置上。,江苏省锡山高级中学 信息技术教研组,待排元
7、素序列:53 27 36 15 69 42第一次排序: 27 53 36 15 69 42第二次排序: 27 36 53 15 69 42第三次排序: 15 27 36 53 69 42第四次排序: 15 27 36 53 69 42第五次排序: 15 27 36 42 53 69,从小到大排序,i:待进行排序的元素下标 j:比较过程中移动的下标,江苏省锡山高级中学 信息技术教研组,插入排序程序,program crpx; const n=7; var a:array1n of integer; i,j,temp:integer; begin write(Enter data:); for i:= 1 to n do read(ai); for i:=2 to n do begin temp:=ai;j:=i-1; while (temp0) do begin aj+1:=aj;j:=j-1 end; aj+1:=temp; end; write(output data:); for i:= 1 to n do write(ai, ); end.,从小到大排序,江苏省锡山高级中学 信息技术教研组,作业,熟练掌握三种排序随机生成n个数据,使用选择(改进),冒泡,插入的方法进行从大到小排序。,