㈠ 设计算法,将3个数按从大到小的顺序排列。(高中算法初步)
设3个数顺序表示为a,b,c;顺开始进行比较:
1、如果a大于等于b,则顺底不变,即a,b,c;(1)
如果a小于b,则将a与b变位置互换,即b,a,c;(2)
2、用第二个数与第三个比较,
按(1):
如果b大于等于c,则顺底不变,即a,b,c;(完成)
如果b小于c,则b与c变位置互换,即a,c,b;(3)
按(2):
如果a大于等于c,则顺底不变,即b,a,c;(完成)
如果a小于c,则a与c变位置互换,即b,c,a;(4)
(冒泡排序法第一轮完成)
第二轮:
按(3):
如果a大于等于c,则顺底不变,即a,c,b;(完成)
如果a小于c,则a与c变位置互换,即c,a,b;(完成)
按(4):
如果b大于等于c,则顺底不变,即b,c,a;(完成)
如果b小于c,则a与c变位置互换,即c,b,a;(完成)
㈡ C语言,快速排序算法
0和N-1表示的是数组下标。快排每一趟排序的目的是使值比设定的key值小的数都排到数组前部分,大的都排到后部分;然后对这两部分用新的关键值key分别重复上一步的操作;递归,直到数组有序。
其中关键值key=a[low]。
用题目给定的数组模拟第一趟排序如下:
下标0123456789
值91647824661232551
low=0high=9
part_element=a[low]=9
进入for循环
进入第一个while
part_element<51,于是high--,high=8;
part_element<25,high--,high=7;
part_element>3,不满足,结束while
a[low]=a[0]=a[high]=a[7]=3,low++,low=1;
进入第二个while
part_element<16,不满足,结束while
a[high]=a[7]=a[low]=a[1]=16,high--,high=6
for第一个循环结束,数组如下
316478246612162551
low=1,high=6
for第二个循环同上,结束时数组如下
344782476612162551
low=2,high=3
for第三个循环,第一个while中high--以后,low==high,直接break跳出for循环,此时
344782476612162551
low=2,high=2
结束for以后
a[high]=a[2]=part_element=9,得到
34982476612162551
split函数returnhigh=2
quicksort函数中middle=2;
下面两句递归,仍然是调用split函数,对数组
0-2,3-9两部分分别重复上述操作
最后直到数组数据有序