谭浩强C程序设计习题6-2思考
Posted teamcolt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谭浩强C程序设计习题6-2思考相关的知识,希望对你有一定的参考价值。
题目:用选择法对10个整数排序。
选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完(选自百度百科)。这个概念都有点迷糊,要是这样子排序的话,岂不是要比较 n! 次?而且是不是需要一个额外的空间来存放比较后的序列?而且都比较了一次为啥不用冒泡算法好点。这里我还是直接用冒泡算法做吧,然后看看参考答案,比较一下优劣。
1 #include<stdio.h> 2 #define N 10 3 4 /*冒泡算法实现*/ 5 int main() 6 { 7 int num[N]; 8 int i, j, temp; 9 printf("Please enter 10 numbers:"); 10 /*读入十个数*/ 11 for (int k = 0; k < N; k++) 12 { 13 scanf("%d", &num[k]); 14 } 15 16 for(i = 0; i<N-1; i++) 17 for (j = i + 1; j < N; j++) //按从小到大排列 18 { 19 if (num[i] > num[j]) 20 { 21 temp = num[i]; 22 num[i] = num[j]; 23 num[j] = temp; 24 } 25 } 26 /*输出排序后的数组*/ 27 for (int k = 0; k < N; k++) 28 { 29 printf("%d ", num[k]); 30 } 31 return 0; 32 }
看了一下学习辅导,怎么感觉也是冒泡啊?
1 #include<stdio.h> 2 int main() 3 { 4 int i, j, min, temp, a[11]; 5 printf("enter data: "); 6 for (i = 1; i <= 10; i++) 7 { 8 printf("a[%d] = ",i); 9 scanf("%d", &a[i]); //输入十个数 10 } 11 printf(" "); 12 printf("The orginal numbers: "); 13 for (i = 1; i <= 10; i++) 14 printf("%5d", a[i]); //输出这十个数 15 printf(" "); 16 for (i = 1; i <= 9; i++) //以下8行是对10个数排序 17 { 18 min = i; 19 for (j = i + 1; j <= 10; j++) 20 if (a[min] > a[j]) min = j; 21 temp = a[i]; //以下3行将a[i+1]~a[10]中的最小值与a[i]对换 22 a[i] = a[min]; 23 a[min] = temp; 24 } 25 printf(" The sorted numbers: "); //输出已排序好的10个数 26 for (i = 1; i <= 10; i++) 27 printf("%5d", a[i]); 28 printf(" "); 29 return 0; 30 }
核心代码应该就是冒泡吧,之只是用min代替了j而已。
以上是关于谭浩强C程序设计习题6-2思考的主要内容,如果未能解决你的问题,请参考以下文章
谭浩强版C语言程序设计(第三版)课后习题完整答案附源码--高等教育出版社