148 鍊錶排序

2021-10-21 22:53:09 字數 707 閱讀 1435

每趟將乙個待排序的關鍵字按照其值的大小將其插入到已經排好的部分有序序列的適當位置上,直到所有待排關鍵字都被插入到有序序列中為止。

public void select_sort(int  nums)

nums[j+1]=temp;//找到插入位置,將temp中暫存的待排關鍵字插入

}}

鍊錶的直接插入排序:

如果是陣列的插入排序,則陣列的前面部分是有序序列,每次找到有序序列後面的第乙個元素(待插入元素)的插入位置,將有序序列中的插入位置後面的元素都往後移動一位,然後將待插入元素置於插入位置。

對於鍊錶而言,插入元素時只要更新相鄰節點的指標即可,不需要像陣列一樣將插入位置後面的元素往後移動,因此插入操作的時間複雜度是o(1),但是找到插入位置需要遍歷鍊錶中的節點,時間複雜度是 o(n),因此鍊錶插入排序的總時間複雜度仍然是 o(n^2),其中 n是鍊錶的長度。

對於單向鍊錶而言,只有指向後乙個節點的指標,因此需要從鍊錶的頭節點開始往後遍歷鍊錶中的節點,尋找插入位置。

public listnode insertionsortlist(listnode head) else

current = lastsorted.next;

}// 鍊錶的插入排序,是從前往後移動,找到比當前值小的位置,將其插在其之後。

return d.next;

}

鍊錶 排序鍊錶(leetcode 148

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。以下解析來自於 常見排序方法有很多,插入排序,選擇排序,堆排序,快速排序,氣泡排序,歸併排序,桶排序等等。它們的時間複雜度不盡相同,而這裡題目限定了時間必須為o nlgn 符合要求只有快速排序,歸併排序,堆排序 所以說,本題 l...

148 排序鍊錶

根據演算法題目要求,看出主要考察排序演算法中的歸併排序,那歸併排序的思想類似於分治。簡單描述為 第一步 遞迴,找中點,切割鍊錶 第二步 對每個子鍊錶操作 第三步 把排序好的子鍊錶一步步合併 class solution 遞迴地切割表 直達最後表只有乙個或者沒有乙個節點 再進行合併 listnode ...

148 排序鍊錶

自己做鍊錶的題很容易弄錯,感覺對鍊錶太不熟悉了。需要加強對鍊錶的練習。這種鍊錶題有時感覺思路很簡單,但是在寫 的過程中會發現處理起來要十分的細心。下面 記錄兩種實現方法 都是別人實現的方法 第一種方法 裡注釋掉的部分 不滿足題目要求 1 設定快慢指標分割鍊錶,遞迴 2 對分割後的鍊錶進行排序,合併兩...