我学到这里我已经学到了好多了,不同语言的实现
/**
* @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 星