首頁>Club>
6
回覆列表
  • 1 # 使用者1465424935672

    1. 氣泡排序吧!

    交換那裡為什麼這麼做,看上去Books應該是Array, push是array的方法,是在array最後新增若干元素。而Books[i]應該是一個Book,你確定他有push這個方法嗎?

    這麼寫就可以了:

    var tmp =$scope.reader.Books[j],

    $scope.reader.Books[j] = $scope.reader.Books[j + 1],

    $scope.reader.Books[j + 1] = tmp;

    2. 另外若不考慮排序的穩定性可以使用js原生的sort,很高效的。

    1)

    var arr = [1, 3, 2, 4];

    arr.sort(); //arr 變成了[1, 2, 3, 4]

    2)

    //按名稱排序。

    var arr = [{k: 1, v: "s"}, {k: 3, v: "s"}, {k: 2, v: "f"}, {k: 4, v: "h"}];

    arr.sort(functoin(a, b) {

    return a.k - b.k;

    });

    //arr程式設計 [{k: 1, v: "s"}, {k: 2, v: "f"}, {k: 3, v: "s"}, {k: 4, v: "h"}

    即可以按arr.k進行排序。

    sort中的這個引數是個函式。函式返回負數表示a應該排在b的前面,正數相反(b在a的前面)。

    3)

    js原生的sort排序在不同的瀏覽器中的實現是不同的。請看下例:

    在2)中若arr = [{k: 1, v: "s"}, {k: 3, v: "s"}, {k: 1, v: "f"}, {k: 4, v: "h"}]

    即第2個(從0開始的)和第2個數據的k一樣(arr[0].k==1 arr[2].k == 1)

    這樣的資料用2)的方式排序的結果怎麼樣的?

    結果可能是: sfsh也有可能是fssh,因為sort裡面的那個函式並沒有強調返回0時誰應該在前面。

    這就是排序的穩定性,穩定排序是指:排序時對於值相同的元素,其相對位置不會發生變化。據我說知:firefox排序演算法是合併排序;chrome在對待少量資料是用插入排序,對待資料量較大時用快速排序(好像是以10個元素個數為界限);ie排序演算法我不知道,但是好像它的排序很慢,它用的排序也是不穩定的(會不會用的是選擇排序呢?)。

    現在說一下個演算法的穩定性和效率吧:

    a).快排。顧名思義,效率很高(o(nlgn)),chrome選擇了他,並做了最佳化(少量資料用插入排序優於快速排序的),效率很高,一般的排序都選擇用它;但他是非穩定排序。

    b).合併排序。效率比快排差(時間負責度o(nlgn),空間複雜度o(n)),一般較少用於排序;他是穩定排序。

    c)堆排序。o(nlgn); 非穩定排序。

    d)冒泡、插入 排序。 o(n^2); 穩定排序。

    e)選擇排序。 o(n^2): 非穩定排序。

    這裡說了好多廢話。。。

    4)給你寫個排序怎麼樣。你要就說,我就去寫,不要就不寫了。你的氣泡排序效率很低的。。。

  • 中秋節和大豐收的關聯?
  • 40歲的時候辭職讀博,有前途嗎?