📄 chapter10.htm
字号:
//输出数据<br>
for(int k=0;k<n;k++)<br>
cout << A[k] << " ";<br>
cout << endl;<br>
//结束输出 <br>
<br>
}<br>
}</p>
<p class="style2">void main()<br>
{<br>
int i;<br>
<br>
int data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};<br>
cout << "排序前的数据:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
cout << "开始排序..." << endl;<br>
BubbleSort(data1, 20);<br>
cout << "排序后的数据:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
}</p>
<p class="style2">程序运行输出:<br>
排序前的数据:<br>
1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 <br>
开始排序...<br>
1 3 5 7 9 11 13 15 17 2 4 6 8 10 12 14 16 18 19 20 <br>
1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 17 18 19 20 <br>
1 3 5 7 9 11 13 2 4 6 8 10 12 14 15 16 17 18 19 20 <br>
1 3 5 7 9 11 2 4 6 8 10 12 13 14 15 16 17 18 19 20 <br>
1 3 5 7 9 2 4 6 8 10 11 12 13 14 15 16 17 18 19 20 <br>
1 3 5 7 2 4 6 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
1 3 5 2 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
1 3 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
排序后的数据:<br>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
</p>
<p class="style2"><strong>10-7 教材中的排序算法都是升序排序,稍做修改后即可完成降序排序,以起泡排序法为例,完成降序的起泡排序函数模板,初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用降序起泡排序函数模板进行排序,加入输出语句,每完成一趟起泡排序后显示整个数组,观察排序过程中数据的变化。</strong><br>
</p>
<p class="style2">解: <br>
#include <iostream.h></p>
<p class="style2">// 辅助函数:交换x和y的值<br>
template <class T><br>
void Swap (T &x, T &y)<br>
{<br>
T temp;<br>
<br>
temp = x;<br>
x = y;<br>
y = temp;<br>
}</p>
<p class="style2">// 用起泡法对数组A的n个元素进行排序<br>
template <class T><br>
void BubbleSort(T A[], int n)<br>
{<br>
int i,j; <br>
int lastExchangeIndex; <br>
//用于记录每趟被交换的最后一对元素中较小的下标<br>
i = n-1; // i是下一趟需参与排序交换的元素之最大下标<br>
<br>
while (i > 0) <br>
//持续排序过程,直到最后一趟排序没有交换发生,或已达n-1趟<br>
{<br>
lastExchangeIndex = 0; <br>
//每一趟开始时,设置交换标志为0(未交换)<br>
for (j = 0; j < i; j++) //每一趟对元素A[0]..A[i]进行比较和交换<br>
if (A[j+1] > A[j]) //如果元素A[j+1] < A[j],交换之<br>
{ <br>
Swap(A[j],A[j+1]);<br>
lastExchangeIndex = j; <br>
//记录被交换的一对元素中较小的下标<br>
}<br>
<br>
// 将i设置为本趟被交换的最后一对元素中较小的下标<br>
i = lastExchangeIndex;<br>
//输出数据<br>
for(int k=0;k<n;k++)<br>
cout << A[k] << " ";<br>
cout << endl;<br>
//结束输出 <br>
<br>
}<br>
}</p>
<p class="style2">void main()<br>
{<br>
int i;<br>
<br>
int data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};<br>
cout << "排序前的数据:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
cout << "开始排序..." << endl;<br>
BubbleSort(data1, 20);<br>
cout << "排序后的数据:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
}<br>
程序运行输出:<br>
排序前的数据:<br>
1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 <br>
开始排序...<br>
3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 1 <br>
5 7 9 11 13 15 17 19 3 4 6 8 10 12 14 16 18 20 2 1 <br>
7 9 11 13 15 17 19 5 4 6 8 10 12 14 16 18 20 3 2 1 <br>
9 11 13 15 17 19 7 5 6 8 10 12 14 16 18 20 4 3 2 1 <br>
11 13 15 17 19 9 7 6 8 10 12 14 16 18 20 5 4 3 2 1 <br>
13 15 17 19 11 9 7 8 10 12 14 16 18 20 6 5 4 3 2 1 <br>
15 17 19 13 11 9 8 10 12 14 16 18 20 7 6 5 4 3 2 1 <br>
17 19 15 13 11 9 10 12 14 16 18 20 8 7 6 5 4 3 2 1 <br>
19 17 15 13 11 10 12 14 16 18 20 9 8 7 6 5 4 3 2 1 <br>
19 17 15 13 11 12 14 16 18 20 10 9 8 7 6 5 4 3 2 1 <br>
19 17 15 13 12 14 16 18 20 11 10 9 8 7 6 5 4 3 2 1 <br>
19 17 15 13 14 16 18 20 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 17 15 14 16 18 20 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 17 15 16 18 20 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 17 16 18 20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 17 18 20 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 18 20 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
19 20 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 <br>
排序后的数据:<br>
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 </p>
<p class="style2"> </p>
<p class="style2"><strong>10-8 简单说明顺序查找的算法思想。</strong><br>
</p>
<p class="style2">解: <br>
顺序查找是一种最简单、最基本的查找方法。<br>
其基本思想是:从数组的首元素开始,逐个元素与待查找的关键字进行比较,直到找到相等的。若整个数组中没有与待查找关键字相等的元素,就是查找不成功。<br>
</p>
<p class="style2"><strong>10-9 初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},提示用户输入一个数字,调用教材中的顺序查找函数模板找出它的位置。</strong><br>
</p>
<p class="style2">解: <br>
#include <iostream.h></p>
<p class="style2">template <class T><br>
int SeqSearch(T list[], int n, T key)<br>
{<br>
for(int i=0;i < n;i++)<br>
if (list[i] == key)<br>
return i; <br>
return -1; <br>
}</p>
<p class="style2">void main()<br>
{<br>
int i, n;<br>
<br>
int data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};<br>
cout << "输入想查找的数字(1~20):";<br>
cin >> n;<br>
cout << "数据为:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
i = SeqSearch ( data1 , 20 , n );<br>
if (i<0)<br>
cout << "没有找到数字" << n << endl;<br>
else<br>
cout << n << "是第" << i+1 << "个数字" << endl;<br>
}</p>
<p class="style2">程序运行输出:<br>
输入想查找的数字(1~20):6<br>
数据为:<br>
1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 <br>
6是第13个数字</p>
<p class="style2"> </p>
<p class="style2"><strong>10-10 简单说明折半查找的算法思想。</strong><br>
</p>
<p class="style2">解: <br>
如果是在一个元素排列有序的数组中进行查找,可以采用折半查找方法。<br>
折半查找方法的基本思想是:对于已按关键字排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。<br>
</p>
<p class="style2"><strong>1</strong><strong>0-11 初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},提示用户输入一个数字,调用教材中的折半查找函数模板找出它的位置。</strong><br>
</p>
<p class="style2">解: <br>
#include <iostream.h></p>
<p class="style2">// 用折半查找方法,在元素呈升序排列的数组list中查找值为key的元素<br>
template <class T><br>
int BinSearch(T list[], int n, T key)<br>
{<br>
int mid, low, high;<br>
T midvalue;<br>
low=0;<br>
high=n-1;<br>
while (low <= high) // low <= high表示整个数组尚未查找完<br>
{<br>
mid = (low+high)/2; // 求中间元素的下标<br>
midvalue = list[mid]; // 取出中间元素的值<br>
if (key == midvalue) <br>
return mid; // 若找到,返回下标<br>
else if (key < midvalue)<br>
high = mid-1; <br>
// 若key < midvalue将查找范围缩小到数组的前一半<br>
else<br>
low = mid+1; // 否则将查找范围缩小到数组的后一半<br>
}<br>
return -1; // 没有找到返回-1<br>
}</p>
<p class="style2">void main()<br>
{<br>
int i, n;<br>
<br>
int data1[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};<br>
cout << "输入想查找的数字(1~20):";<br>
cin >> n;<br>
cout << "数据为:" << endl;<br>
for(i=0;i<20;i++)<br>
cout << data1[i] << " ";<br>
cout << endl;<br>
i = BinSearch ( data1 , 20 , n );<br>
if (i<0)<br>
cout << "没有找到数字" << n << endl;<br>
else<br>
cout << n << "是第" << i+1 << "个数字" << endl;<br>
<br>
}</p>
<p class="style2">程序运行输出:<br>
输入想查找的数字(1~20):9<br>
数据为:<br>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <br>
9是第9个数字</p>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -