class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
int n = nums.size();
SelectSort(nums,n);
return nums;
}
//插入
void InsertSort(vector<int>& nums,int n) {
for(int i=0;i<n;i++) {
int temp = nums[i];
int j = i-1;
while(j >= 0 && nums[j] >temp) {
nums[j+1] = nums[j];
j--;
}
nums[j+1] = temp;
}
}
//折半插入
void HInsertSort(vector<int>& nums,int n) {
int i,j,low,high,mid;
for( i=0;i<n;i++ ){
int tmp = nums[i];
low = 0;high = i-1;
while(low<=high) {
mid = low+(high-low)/2;
if(nums[mid] > 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<int>& nums,int n){
for(int dk = n/2;dk>=1;dk=dk/2){
for(int i=dk;i<n;++i) {
if(nums[i]<nums[i-dk]){
int tmp = nums[i],j;
for(j = i-dk;j>=0&&tmp<nums[j];j-=dk){
nums[j+dk] = nums[j];
}
nums[j+dk]=tmp;
}
}
}
}
//冒泡
void BubbleSort(vector<int>& nums,int n){
for(int i=0;i<n-1;i++) {
bool flag = false;
for(int j=n-1;j>i;j--) {
if(nums[j-1]>nums[j]){
swap(nums[j-1],nums[j]);
flag = true;
}
}
if(flag == false){
return ;
}
}
}
//快排
void QuickSort(vector<int>& nums,int low,int high,int n){
if(low<high) {
int pivotpos = partition(nums,low,high);
QuickSort(nums,low,pivotpos-1,n);
QuickSort(nums,pivotpos+1,high,n);
}
}
int partition(vector<int>& nums,int low,int high){
int pivot = nums[low];
while(low<high) {
while(low<high && nums[high]>=pivot)--high;
nums[low] = nums[high];
while(low<high && nums[low]<=pivot) ++low;
nums[high] = nums[low];
}
nums[low] = pivot;
return low;
}
//简单选择
void SelectSort(vector<int>& nums,int n) {
for(int i=0;i<n-1;i++) {
int min = i;
for(int j=i+1;j<n;j++) {
if(nums[j]<nums[min]) min = j;
}
if(min!=i) swap(nums[i],nums[min]);
}
}
//堆排序
void adjust(vector<int> &nums, int len, int index){
int left = 2*index + 1; // index的左子节点
int right = 2*index + 2;// index的右子节点
int maxIdx = index;
if(left<len && nums[left] > nums[maxIdx]) maxIdx = left;
if(right<len && nums[right] > nums[maxIdx]) maxIdx = right;
if(maxIdx != index)
{
swap(nums[maxIdx], nums[index]);
adjust(nums, len, maxIdx);
}
}
// 堆排序
void HeapSort(vector<int> &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);
}
}
};
Leetcode 各种排序
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Python小白 Leetcode刷题历程 No.81-No.85 搜索旋转排序数组Ⅱ、删除排序链表中...
- 题目描述: 在O(nlogn)时间复杂度和常数级空间复杂度下,对链表进行排序。 示例: 输入: -1->5->3-...
- 题目 给你一个整数数组 nums,将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2...
- 原文链接https://www.polarxiong.com/archives/Python-%E4%BD%BF%...
- 1. Merge Sorted Array Description: Easy Given two sorted ...