título Descripción
912. matriz ordenada
Solución uno: Fila rápida
class Solution {
public:
int partition(vector<int>& nums, int l, int r){
int pivot = l;
for(int i=l+1;i<=r;i++)
{
if(nums[i]<nums[l]) swap(nums[i], nums[++pivot]);
}
swap(nums[pivot], nums[l]);
return pivot;
}
int randomized_partition(vector<int>& nums, int l, int r){
int i = rand() % (r-l+1)+l;
swap(nums[l], nums[i]);
return partition(nums, l, r);
}
void randomized_quicksort(vector<int>& nums, int l, int r)
{
if(l<r)
{
int pos = randomized_partition(nums, l, r);
randomized_quicksort(nums, l, pos-1);
randomized_quicksort(nums, pos+1, r);
}
}
vector<int> sortArray(vector<int>& nums) {
srand((unsigned)time(NULL));
randomized_quicksort(nums, 0, (int)nums.size()-1);
return nums;
}
};
Solución dos: Montón fila
class Solution {
public:
void adjustheap(vector<int>& nums, int i, int len){
int tmp = nums[i];
for(int k=i*2+1;k<len;k=k*2+1)
{
if(k+1<len && nums[k]<nums[k+1]) k++;
if(nums[k]>tmp)
{
nums[i] = nums[k];
i = k;
}
else break;
}
nums[i] = tmp;
}
void heapsort(vector<int>& nums){
for(int i=nums.size()/2-1;i>=0;i--)
adjustheap(nums, i, nums.size());
for(int i=nums.size()-1;i>=1;i--)
{
swap(nums[0], nums[i]);
adjustheap(nums, 0, i);
}
}
vector<int> sortArray(vector<int>& nums) {
heapsort(nums);
return nums;
}
};