给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
冒泡排序解法,超出时间限制
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
bool hasChange = true;
for(int i=0;i<nums.size()-1 && hasChange;i++){
hasChange = false;
for(int j=0;j<nums.size()-1-i;j++){
if(nums[j]>nums[j+1]){
swap(nums,j,j+1);
hasChange = true;
}
}
}
return nums;
}
void swap(vector<int>& nums,int i,int j){
int a = nums[i];
nums[i] = nums[j];
nums[j] = a;
}
};
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int temp,current,j;
for(int i=1;i<nums.size();i++){
current = nums[i];
for(j=i-1;j>=0 && nums[j]>current;j--){
nums[j+1]=nums[j];
}
nums[j+1] = current;
}
return nums;
}
};
对链表进行插入排序。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例 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.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
int temp,j,i;
vector<int> Array;
ListNode* ptr=head;
for(ptr=head;ptr;ptr=ptr->next){
Array.push_back(ptr->val);
}
sortArray(Array);
for(ptr=head,i=0;ptr;ptr=ptr->next,i++){
ptr->val = Array[i];
}
return head;
}
vector<int> sortArray(vector<int>& nums) {
int temp,current,j;
for(int i=1;i<nums.size();i++){
current = nums[i];
for(j=i-1;j>=0 && nums[j]>current;j--){
nums[j+1]=nums[j];
}
nums[j+1] = current;
}
return nums;
}
};
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
sort(nums,0,nums.size()-1);
return nums;
}
void sort(vector<int>& nums,int l,int r){
int mid = l + (r-l)/2;
if(l>=r) return;
sort(nums,l,mid);
sort(nums,mid+1,r);
Merge(nums,l,mid,r);
}
void Merge(vector<int>& nums,int l,int mid,int r){
vector<int>OutArray(nums);
int i = l,j = mid+1;
int t = l;
while(t<=r){
if(i>mid){
nums[t++] = OutArray[j++];
}else if(j>r){
nums[t++] = OutArray[i++];
}else if(OutArray[i]<OutArray[j]){
nums[t++] = OutArray[i++];
}else{
nums[t++] = OutArray[j++];
}
}
}
};