选择排序的实现以及如何编写测试 #CS61B-sp18-3.1
Selection Sort的思想:
就是在一系列数字中先找到一个最小的放在所有数字的第一个位置上,然后再从余下的数字里面找最小个放在余下的数字里的第一个位置上。
例如:
在这段数据里面我们找到最小的数字是2,它的下标是2,那么我们把它移到最前面,就变成
如此往复,直到所有的的全部排序完毕才算结束。
为了实现这一排序我们需要:
①逐个找到最小值的下标
②将最小值与位置靠前的元素交换
③将余下的所有完成交换
在CS61B中,Josh Hug使用了递归的方式来解决这个问题(他真的好喜欢递归- -!),具体代码实现如下:
/**
* @author century
*/
public class Sort { public static void sort(String[] str) {
// find the smallest item
// move it to the front
// selection sort the rest (using recursion?)
sort(str,0);
} /**
* This is a helper method for the public method(sort)
* @param str
* @param start
*/
private static void sort(String[] str, int start) {
if (start == str.length) {
return;
}
int smallestIndex = findSmallest(str, start);
swap(str, start, smallestIndex);
sort(str, start + 1);
} /**
* return the smallest String item's index of this arr
* @param str
* @return smallestIndex
*/
public static int findSmallest(String[] str, int start) {
int smallestIndex = start;
for (int i = start; i < str.length; i += 1) {
int comp = str[i].compareTo(str[smallestIndex]);
if (comp < 0) {
smallestIndex = i;
}
}
return smallestIndex;
} /**
* swap the value of two different index
* @param arr
* @param a
* @param b
*/
public static void swap(String[] arr, int a, int b) {
String temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
} }
另外在这门课里面,Josh Hug教给学生应该如何编写测试来验证自己所编写的代码的正确性。
编写测试的步骤是:
先导入JUnit的包,然后再把JUnit包中Assert类的所有方法给导入,之后只需要在每个测试方法上加上一个@Test注解,然后在内部编写具体的测试方法就vans了。
下面代码是关于上面选择排序的测试类:
import org.junit.Test;
import static org.junit.Assert.*; /**
* @author century
*/
public class TestSort { /**
* Test the Sort.sort(String[] arr)
*/
@Test
public void testSort() {
String[] input = {"i","have","an","egg"};
String[] expected = {"an","egg","have","i"};
Sort.sort(input);
assertArrayEquals(input, expected);
} /**
* Test the method (Sort.findSmallest)
*/
@Test
public void testFindSmallest() {
String[] input = {"i","have","an","egg"};
int expected = 2; int actual = Sort.findSmallest(input, 0);
assertEquals(actual,expected);
} /**
* Test the method (Sort.swap)
*/
@Test
public void testSwap() {
String[] input = {"i","have","an","egg"};
String[] input2 = {"an","have","i","egg"};
int a = 0, b = 2; Sort.swap(input2, 0 , 2); assertArrayEquals(input, input2);
} }
选择排序的实现以及如何编写测试 #CS61B-sp18-3.1的更多相关文章
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
- XCode中的单元测试:编写测试类和方法(内容意译自苹果官方文档)
当你在工程中通过测试导航栏添加了一个测试target之后, xcode会在测试导航栏中显示该target所属的测试类和方法. 这一章演示了怎么创建测试类,以及如何编写测试方法. 测试targets, ...
- Java基础(46):选择排序的Java封装(完整可运行)
1 package lsg.ap.select; import java.util.Random; public class SelectSort { //选择排序 /** *@author: 梁山广 ...
- C语言实现冒泡排序法和选择排序法代码参考
为了易用,我编写排序函数,这和直接在主调函数中用是差不多的. 我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误! 冒泡排序法 void sort(int * ar, ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- 【算法】简单选择排序 O(n^2) 不稳定的 C语言
简单选择排序 一.算法描述 假设序列中有N个元素: 第1趟找到第1到N个元素之间最小的一个,与第1个元素进行交换 第2趟找到第2到N个元素之间最小的一个,与第2个元素进行交换 第3趟找到第3到N个元素 ...
- Java版冒泡排序和选择排序
一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
随机推荐
- 堆、栈、数据区、bss、代码段
一个程序的运行是需要内存的,那么我们平常写的程序的内存都是怎么分配的呢 (1)首先我们要知道,内存是真实存在的,内存是一个物理器件.它时由操作系统管理的,我们平常只要使用它就行了,为了方便管理.操作系 ...
- vue与react对比总结(一)
一.react和vue设计上的共同理念 1.使用 Virtual DOM 2.提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件. 3.将注意力集中保持在核心库,而将其 ...
- 编译Spring5.2.0源码
下载 spring-framework-5.2.0.RELEASE.zip https://github.com/spring-projects/spring-framework/releases 下 ...
- tomcat配置项目虚拟路径
tomcat版本:apache-tomcat-7.0.42 参考:http://blog.csdn.net/pangdingshan/article/details/7214786 一.虚拟根目录 1 ...
- CentOS/RHEL 6.4/5.9 安装 Adobe Flash Player 11.2
1.root登录: $ su 2.安装 Adobe YUM Repository RPM package X86_64 ________________________________________ ...
- JVM源码分析之Java对象头实现
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Java对象头实现 HotSpot虚拟机中,对象在内存中的布局分为三 ...
- css中vertical-aling与line-height
基线 baseline:字符x的底部 x-height: 字母x的高度,vertical-aling设置为middle的时候,对齐的是baseline往上1/2的x-height,所以vertical ...
- 前端分页(js)
//前端分页 var limit = 10; //每页显示数据条数 var total = $('#host_table').find('tr').length; var allPage = tota ...
- GitHub 热点速览 Vol.27:程序员的自我救赎——GitHub 摸鱼
作者:HelloGitHub-小鱼干 摘要:都知道 VSCode 有各种摸鱼小插件,边听云音乐.边在 IDE 斗地主,再来一个 NBA 直播,怎一个美滋滋了得.作为 VSCode 的同门,GitHub ...
- 记一次线上服务CPU 100%的处理过程
告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误.查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%. 赶紧从会上下来,SSH登录 ...