排序小结

mac2022-06-30  117

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

冒泡排序:

接触的第一种排序方法

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

一共需要比较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

最新回复(0)