對鍊錶進行插入排序

2021-10-04 08:29:55 字數 1614 閱讀 9525

描述

對鍊錶進行插入排序。

插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。

每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。

插入排序演算法:

插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。

每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。

重複直到所有輸入資料插入完為止。

思路和**

用tail表示排好序的鏈尾,用node表示當前遍歷到的結點,用cur表示從dummy開始遍歷到node應該插入的位置的前乙個結點

class

solution

tail-

>next = node-

>next;

node-

>next = cur-

>next;

cur-

>next = node;

node=tail-

>next;

}else

}return dummy-

>next;}}

;

描述

給你乙個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]

輸出: 3

示例 2:

輸入: [3,4,-1,1]

輸出: 2

示例 3:

輸入: [7,8,9,11,12]

輸出: 1

雜湊

class

solution

for(

int i=1;

; i++)}

};

桶排序

參考本質上是桶排序 (bucket sort),每當 a[i]!= i+1 的時候,將 a[i] 與 a[a[i]-1] 交換,直到無法 交換為止,終止條件是 a[i]== a[a[i]-1]。小於等於0或者大於n的數不用交換,因為不會影響。

class

solution

private

:void

bucket_sort

(vector<

int>

& a,

int n)}}

};

描述

給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。

此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

注意:不能使用**庫中的排序函式來解決這道題。

示例:輸入: [2,0,2,1,1,0]

輸出: [0,0,1,1,2,2]

思路和**

1.遍歷一遍陣列,得出0,1,2出現多少次,然後遍歷陣列,一一賦值即可

2.荷蘭國旗問題

class

solution

else

if(nums[curr]==2

)else curr++;}

}};

對鍊錶進行插入排序

1.問題描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次...

對鍊錶進行插入排序

對鍊錶進行插入排序。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 ...

對鍊錶進行插入排序

題目 示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 解題思路 需要維護幾個引用來記錄當前已排序的和正在排序的節點,當找到大於當前要排序的節點值後進行插入操作 definition for singly linked list.pu...