我学到这里我已经学到了好多了,不同语言的实现

我学到这里我已经学到了好多了,不同语言的实现

/**
 * @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年了才百分之几的进度。以前一直想使用其他语言来实现课程里面的所有数据结构和算法,现在我感觉我才能使用其他语言来实现这课程里面的所有代码,我从第一次打开这个视频什么都不会,到现在我还算会一点了。终于可以吧这课程好好学完了。

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

我在这里的第一部分回答希望你能再看一下:https://class.imooc.com/course/qadetail/343141


总结就是:学习算法和数据结构的核心不是如何用某一个语言“最优雅”地实现他们,而是学习这些算法和数据结构的逻辑和思想。


事实上:一个实现的再烂的归并排序或者快速排序,在面对大数据量的时候,也比实现的无比优雅地选择排序要快,甚至快上万倍。这才是算法和数据结构真正的力量,是我们学习算法和数据结构的重点。


依然是,不是说“优雅的实现”不重要,而是“优雅的实现”应该属于下一个阶段的学习目标,并且这已经很大程度脱离算法和数据结构的范畴了。


不管怎样,现在你开始决定学习这个课程了,就继续加油吧!:)

  • 星光荡开宇宙 提问者 #1

    老师我懂了,数据结构与算法本来就是抽象的东西(是一种概念的东西),我们实现只是把抽象的逻辑用代码表达而已。这种感觉就像一个指导手册一样。

    2023-03-11 10:53:04
  • 星光荡开宇宙 提问者 #2

    而且实现不同语言的实现,我们也不能突破,语言本身的边界。收获很多

    2023-03-11 10:56:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2589    人
  • 解答问题       1090    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师