排序算法总结

下面总结几个常用排序算法(因为现在在学C++,所以下面都是C++的代码,但其实C的代码跟这个差不多)

1.简化版桶排序

#include <iostream>
using namespace std;
#define N 5  //有N个数 
#define M 10  //取值是0—M 
int main()
{
    int i,j;
    int a[M];
    for (i=0;i<M;i++)
    {
        a[i]=0;       //每一个都出现了0次
    }
    for (j=0;j<N;j++)
    {
        int t;
        cin>>t;
        a[t]++;
     }
    for (i=0;i<M;i++)
    {
        for (j=1;j<=a[i];j++)
        {
            cout<<i<<" ";
        }
    }
    return 0; 
}

 

2.冒泡排序

敲一遍才知道之前学C 的时候学的这个冒泡排序好不扎实,有好多细节都没理解!!

再次更新:理解理解理解!太重要了!当时学C语言时感觉这些算法已经滚瓜烂熟,但是完完全全地自己写一遍还是有一些问题!

注意:

关于两个循环:

1.首先是有n个数,所以第一个循环需要遍历n-1次(为什么不是n次呢?因为做完n-1个数字的排序后,最后一个数字的顺序也确定了)

2.第二次循环:i的含义代表已经有i个数字归位了,那么剩下的数字需要再比较n-i-1次

 

下面是正确的C++代码,局限是我已经指定了数组的大小

#include <iostream>
using namespace std;
int main()
{
    int i,j;
    int n=10;
    int a[10];
    for (i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for (i=0;i<n-1;i++)  //进行n-1次排序 
    {
        for (j=0;j<n-i;j++)  //注意:每一次归位一个数,那么每次再循环的时候就可以少冒泡一次 
        {
            if (a[j]<a[j+1])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    for (i=0;i<n;i++)
    {
        cout<<a[i]<<"\n";
    }
    return 0;
}

 

如果想要指定数组大小,很简单,创建一个动态数组就行:

#include <iostream>
using namespace std;
int main()
{
    int i,j;
    
    int n;
    cin>>n; //输入数组大小
     
    int* a;
    a=new int[n]; //创建一个动态数组,长度为n 
    
    for (i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for (i=0;i<n-1;i++)  //进行n-1次排序 
    {
        for (j=0;j<n-1-i;j++)  //注意:每一次归位一个数,那么每次再循环的时候就可以少冒泡一次 
        {
            if (a[j]<a[j+1])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    for (i=0;i<n;i++)
    {
        cout<<a[i]<<"\n";
    }
    return 0;
}

 

先写到这!学了新的再更新

posted @ 2021-11-23 09:30  EowynTang  阅读(32)  评论(0)    收藏  举报