描述
對鍊錶進行插入排序。
插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。
每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。
插入排序演算法:
插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。
每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。
重複直到所有輸入資料插入完為止。
思路和**
用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...