首页 > 编程语言 > 详细

数组的排序

时间:2020-03-03 10:21:59      阅读:79      评论:0      收藏:0      [点我收藏+]

对于数组的排序,常用的有四种,分别是冒泡法,选择法,插入法和快速排序法。前三个的时间辅助度都是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 q[], int left, int right){

if(left >= right) return;

int x = q[left], i = left - 1, j = right + 1;
while(i < j){
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if(i < j) swap(q[i], q[j]);
}

dfs(q, left, j);
dfs(q, j + 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;
}

数组的排序

原文:https://www.cnblogs.com/123L/p/12400502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!