数组的排序

Posted 123l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的排序相关的知识,希望对你有一定的参考价值。

  对于数组的排序,常用的有四种,分别是冒泡法,选择法,插入法和快速排序法。前三个的时间辅助度都是O(x2),快速排序的时间复杂度是O(nlogn)。

冒泡法

#include<iostream>

using namespace std;

int main()
{
    int n, i, j;
    cin >> n;
    int a[n];
    for(i = 0; i < n; i++)
        cin >> a[i];
    for(i = 1; i < n; i++)
    {
        for(j = 0; j < n - i; j++)
        {
            if(a[j] > a[j+1])
                swap(a[j],a[j+1]);            
        }
    }
    
    for(i = 0; i < n; i++)
        cout << a[i] << "  ";
}

选择法

#include<iostream>

using namespace std;

int main()
{
    int n, i, j;
    cin >> n;
    int a[n];
    for(i = 0; i < n; i++)
        cin >> a[i];
    for(i = 0; i < n - 1; i++)
    {
        for(j = i + 1; j < n; j++)
        {
            if(a[i] > a[j])
                swap(a[i],a[j]);            
        }
    }
    
    for(i = 0; i < n; i++)
        cout << a[i] << "  ";
}

插入法

#include<iostream>

using namespace std;

int main()
{
    int n, i, j;
    cin >> n;
    int a[n];
    for(int i = 0; i < n; i++)
        cin >> a[i];
    for(i = 1; i < n; i++)  //从第二个数开始判断,知道第n个数
    {
        int x = a[i];
        for(j = i - 1; j >= 0 && a[j] >= x; j--)  //从第i-1个数开始往前推,遇到比x大的数或者j==-1就退出循环
        {
            if(a[j] >= x)
                a[j+1] = a[j];
        }
        a[j+1] = x;
    }
    for(i = 0; i < n; i++)
        cout << a[i] << "  ";
}

快速排序法运用递归的思想二分数组直到左下标大于右下标

#include <bits/stdc++.h>

using namespace std;

void dfs(int a[],int left, int right)
{
    if(left < right)    return;
    int t = a[left];
    int i = left, j = right;
    while(i != j)      
    {
        while(i < j && t <= a[j]) 
            j--;
        a[i] = a[j];
        while(i < j && t >= a[i])
            i++;
        a[j] = a[i];
    }
    a[i] = t;
    dfs(a,left,i-1);
    dfs(a,i+1,right);
}


int main()
{
    int n;
    cin >> n;
    int a[n];
    for(int i = 0; i < n; i++)
        cin >> a[i];
    int left = 0, right = n - 1;
    dfs(a, left, right);
    for(int i = 0; i < n; i++)
        cout << a[i];
    return 0;    
}

 

以上是关于数组的排序的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的时间复杂度是多少?

快速排序-递归实现

对数组中的字符串进行排序,使其稀疏

算法排序之堆排序

在第6731次释放指针后双重免费或损坏

VSCode自定义代码片段—— 数组的响应式方法