排序算法实践
2015-06-27 11:08
369 查看
[align=left]输入有两行,第一行是一个正整数,表示有n个同学参与调查(n <= 100)。第二行有n个用空格隔开的正整数,为每本图书的ISBN号(假设图书的isbn号在 1-1000之间);[/align]
[align=left]输出有两行,第一行是一个正整数k,表示需要买多少本书。第二行是k个用空格隔开的正整数,为从小到大已排序的需要购买的图书的ISBN号。[/align]
[align=left]先排序,再去重。或者 先去重,再排序。[/align]
[align=left]第一种方法,桶排序[/align]
第二种:冒泡排序
[align=left]第三种:快速排序[/align]
[align=left]输出有两行,第一行是一个正整数k,表示需要买多少本书。第二行是k个用空格隔开的正整数,为从小到大已排序的需要购买的图书的ISBN号。[/align]
[align=left]先排序,再去重。或者 先去重,再排序。[/align]
[align=left]第一种方法,桶排序[/align]
#include <stdio.h> int main() { int isbn[1001]; int num, k = 0; int a; int i; /*数组必须进行初始化*/ for(i = 0; i < 1001; i++) isbn[i] = 0; printf("输入要调查的学生个数 n = "); scanf("%d", &num); printf("输入ISBN号:"); for (i = 0; i < num; i++) { scanf("%d", &a); if (isbn[a-1] == 0) { k++; isbn[a-1] = 1; } } printf("需要购买 %d 本书\n", k); printf("输出ISBN号:"); for (i = 0; i < 1001; i++) { if (isbn[i] == 1) printf("%d ", i + 1); } getchar(); getchar(); return 0; }
第二种:冒泡排序
#include <stdio.h> int main() { int isbn[1001]; int num, k = 0; int temp; int i, j; /*数组必须进行初始化*/ for(i = 0; i < 1001; i++) isbn[i] = 0; printf("输入要调查的学生个数 n = "); scanf("%d", &num); printf("输入ISBN号:"); for (i = 0; i < num; i++) { scanf("%d", &isbn[i]); } /*冒泡排序, 从小到大*/ for (i = 0; i < num -1; i++) for (j = 0; j < num - 1 - i; j++) { if (isbn[j] > isbn[j + 1]) { temp = isbn[j]; isbn[j] = isbn[j + 1]; isbn[j + 1] = temp; } } printf("输出ISBN号:"); for (i = 0; i < num; i++) { if (isbn[i] != isbn[i + 1]) { printf("%d ", isbn[i]); k++; } } printf("\n需要购买 %d 本书\n", k); getchar(); getchar(); return 0; }
[align=left]第三种:快速排序[/align]
#include <stdio.h> int isbn[1000]; int num; /*从小到大排序*/ void QuickSort(int left, int right) { int i, j; int temp; int a; if (left > right) return; temp = isbn[left]; i = left; j = right; while (i != j) { while (isbn[j] >= temp && i < j) j--; while (isbn[i] <= temp && i < j) i++; //运行到这行的时候已经找到了 if (i < j) { a = isbn[i]; isbn[i] = isbn[j]; isbn[j] = a; } } isbn[left] = isbn[i]; isbn[i] = temp; QuickSort(left, i-1); QuickSort(i + 1, right); } int main() { int i, k = 0; printf("输入调查学生的个数 n = "); scanf("%d", &num); printf( "输入ISBN号:" ); for (i = 0; i < num; i++) scanf("%d", &isbn[i]); QuickSort(0, num-1); printf( "输出ISBN号:" ); for (i = 0; i < num; i++) { if (isbn[i] != isbn[i + 1]) { printf( "%d " , isbn[i]); k++; } } printf( "\n需要购买 %d 本书\n" , k); getchar(); getchar(); return 0; }
相关文章推荐
- JavaScript 运行机制详解:再谈Event Loop
- Linux虚拟地址->物理地址
- Qt 中彩色图像转换为灰度图
- 教程:在ZYBO板卡实现bin文件的固化
- 树莓派2B的GPIO管脚分布
- Java数据类型和MySql数据类型对应表
- BIEE Mobile App 集成应用详细步骤说明
- 计算机类产品评价技术指标体系研究之图形(像)篇
- Java 中的 static 使用之静态初始化块
- opencv 数字图像处理-图像缩放 自己写cvResize()函数
- '-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0xb000000000000153
- 运行和控制Nginx
- java网络编程实现客户端连接服务器端,并发送消息例子(1)。(阻塞式的方法)
- hdoj 1045 Fire Net 【DFS n皇后变形】 【二分图】
- Python socket编程(TCP)
- 5. Laravel5学习笔记:在packagist上发布自己的composer包
- Unity 导出的android项目自动生成Private Libraries
- Linux应用编程:fork与vfork的区别
- DotNetBar中dotNetBarManager设置窗口停靠布局的技巧
- autoboxing demo in Java