题目:
给你一个整数数组 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]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
链接:https://leetcode-cn.com/problems/sort-an-array
思路:
1、常规的排序算法。
2、这里整理了常见的排序算法
C++代码:
class Solution {
public:
vector sortArray(vector& nums) {
int n = nums.size();
QuickSort(nums,0,n-1, n);
return nums;
}
//插入
void InsertSort(vector& nums,int n) {
for(int i=0;i= 0 && nums[j] >temp) {
nums[j+1] = nums[j];
j--;
}
nums[j+1] = temp;
}
}
//折半插入
void HInsertSort(vector& nums,int n) {
int i,j,low,high,mid;
for( i=0;i tmp){
high = mid - 1;
}else{
low = mid + 1;
}
}
for(j=i-1;j>=high+1;j--){
nums[j+1] = nums[j];
}
nums[high+1] = tmp;
}
}
//希尔
void ShellSort(vector& nums,int n){
for(int dk = n/2;dk>=1;dk=dk/2){
for(int i=dk;i=0&&tmp& nums,int n){
for(int i=0;ii;j--) {
if(nums[j-1]>nums[j]){
swap(nums[j-1],nums[j]);
flag = true;
}
}
if(flag == false){
return ;
}
}
}
//快排
void QuickSort(vector& nums,int low,int high,int n){
if(low& nums,int low,int high){
int pivot = nums[low];
while(low=pivot)--high;
nums[low] = nums[high];
while(low& nums,int n) {
for(int i=0;i &nums, int len, int index){
int left = 2*index + 1; // index的左子节点
int right = 2*index + 2;// index的右子节点
int maxIdx = index;
if(left nums[maxIdx]) maxIdx = left;
if(right nums[maxIdx]) maxIdx = right;
if(maxIdx != index)
{
swap(nums[maxIdx], nums[index]);
adjust(nums, len, maxIdx);
}
}
// 堆排序
void HeapSort(vector &nums, int size){
for(int i=size/2 - 1; i >= 0; i--){
adjust(nums, size, i);
}
for(int i = size - 1; i >= 1; i--){
swap(nums[0], nums[i]);
adjust(nums, i, 0);
}
}
};