排序小结

在做很多题目时都会用到排序,先把我遇到过的排序整理一下

冒泡排序:

接触的第一种排序方法

从第一个元素起,开始两两比较,结束之后,最大的数在数组的末尾

一共需要比较n-1次,外循环为n-1,内循环次数随外循环改变,n-1-i

#include<stdio.h>
int main()
{
    int a[1001];
    int i,j,n,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=n-1;i++)
        for(j=0;j<=n-i-1;j++)
    {
        if(a[j]>a[j+1])
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

选择排序:

将最小的数放在前面,然后将a[0]与a[1]比较,由小到大排序,将a[1]与a[2]比较,从小到大排序,……,将a[n]与a[n-1]比较,从小到大排序;再从剩余的n-1个数中选择最小的放在a[1]的位置,以此类推。

#include<stdio.h>
int main()
{
    int a[1001];
    int i,j,n,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
    {
        if(a[i]>a[j])
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

简化版桶排序:

这只是可以满足比较简单的排序的简化版

依次判断桶的编号,出现了几次就打印几次。每出现一个数,对应编号的桶+1

#include<stdio.h>
int main()
{
    int a[1001];
    int i,j,t,n;
    for(i=0;i<1000;i++)
        a[i]=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&t);
        a[t]++;
    }
    for(i=1;i<1000;i++)
        for(j=1;j<=a[i];j++)
        printf("%d ",i);
    return 0;
}

快速排序:

设置一个基准数,将比基准数小的数放左边,比基准数大的数放在其右边

#include<stdio.h>
int a[101],n;
void quicksort(int left,int right)
{
    int i,j,temp,t;
    if(left>right)
        return ;
        temp=a[left];
        i=left;
        j=right;
    while(i!=j)
    {
        while(a[j]>=temp&&i<j)
            j--;
        while(a[i]<=temp&&i<j)
        i++;
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);
    quicksort(i+1,right);
}
int main()
{
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    quicksort(1,n);
    for(i=1;i<=n;i++)
        printf("%d ",a[i]);
    return 0;
}

冒泡排序是将最大的数先放后面;选择排序是将最小的数先放前面;简化版桶排序是每出现一个数,就将对应编号的桶内+1;快速排序需要设置基准点

原文地址:https://www.cnblogs.com/AquamarineOnly/p/5587870.html