我学到这里我已经学到了好多了,不同语言的实现
/** * @description 选择排序算法 * @author 星光 */ class SelectionSort { private constructor() {} static sort<T>( arr: T[], fn?: (arr: T[], index1: number, index2: number) => number ): void { let minIndex: number for (let i = 0, len = arr.length; i < len; i++) { minIndex = i for (let j = i; j < len; j++) { // 自己实现不可比较的逻辑函数 if (fn) { const res = fn(arr, i, j) if (res > 0) { minIndex = j } else { minIndex = i } continue } if (arr[i] > arr[j]) { minIndex = j } } SelectionSort.swap(arr, i, minIndex) } } private static swap<T>(arr: T[], i: number, j: number): void { const mid = arr[j] arr[j] = arr[i] arr[i] = mid } } export default SelectionSort
/** * @description jest 测试选择排序算法 * @author 星光 */ import Student from '../../test/Student' import SelectionSort from './SelectionSort' describe('测试选择排序算法类', () => { test('数字排序', () => { const arr = [9, 4, 3, 5, 7, 2] SelectionSort.sort(arr) expect(arr).toEqual([2, 3, 4, 5, 7, 9]) }) test('测试回调方式', () => { const s1 = new Student('xing', 98) const s2 = new Student('guang', 67) const s3 = new Student('xingguang', 100) const studnet = [s3, s1, s2] SelectionSort.sort(studnet, (arr, i1, i2) => { return arr[i1].score - arr[i2].score }) expect(studnet).toEqual([s2, s1, s3]) }) })
我使用的是typescript, 因为JavaScript对类的支持不是很好,所以它数组的sort方法就是用回调的方式实现的。
我在学习的过程中,我都是一边写一边写测试的,我发现我越写越来越和,js自己数组提供的sort方法一样了,一样有一个回调,这种方法就解决了,不同的类型排序的方法。
因为js自己的问题所以不能像java那样使用类的共同方法来进行统一处理,只能像这样使用回调,使用的人调方法传入回调自己来处理
我已经是不知道第几次打开这个课程了,因为想使用其他语言实现而对语言的了解太浅了,都学不下去。买了3年了才百分之几的进度。以前一直想使用其他语言来实现课程里面的所有数据结构和算法,现在我感觉我才能使用其他语言来实现这课程里面的所有代码,我从第一次打开这个视频什么都不会,到现在我还算会一点了。终于可以吧这课程好好学完了。
正在回答
我在这里的第一部分回答希望你能再看一下:https://class.imooc.com/course/qadetail/343141
总结就是:学习算法和数据结构的核心不是如何用某一个语言“最优雅”地实现他们,而是学习这些算法和数据结构的逻辑和思想。
事实上:一个实现的再烂的归并排序或者快速排序,在面对大数据量的时候,也比实现的无比优雅地选择排序要快,甚至快上万倍。这才是算法和数据结构真正的力量,是我们学习算法和数据结构的重点。
依然是,不是说“优雅的实现”不重要,而是“优雅的实现”应该属于下一个阶段的学习目标,并且这已经很大程度脱离算法和数据结构的范畴了。
不管怎样,现在你开始决定学习这个课程了,就继续加油吧!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星