• 排序算法学习(实现)


    推荐一个网站给大家,知乎上看到的,亲测好用

    http://www.comp.nus.edu.sg/~stevenha/visualization/index.html

    1.冒泡排序

    #include<iostream>
    using namespace std;
    
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    
    int main()
    {
        int len=sizeof(a)/sizeof(int),num2=0,temp;
        for(int i=0;i<len;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        for(int i=0;i<len;i++)
            for(int j=i+1;j<len;j++)
                {
                    if(a[i]>a[j])
                    {
                        temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                        num2++;
                    }
    
                }
        for(int i=0;i<len;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        cout<<len*num2<<endl;
        system("pause");
        return 0;
    }

     2.选择排序

    #include<iostream>
    using namespace std;
    
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    
    int main()
    {
        int len=sizeof(a)/sizeof(int);
        for(int i=0;i<len;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        for(int i=0;i<len;i++)
        {
            int min=a[i],index=i;
            for(int j=i+1;j<len;j++)
                if(min>a[j])
                    {
                        min=a[j];
                        index=j;
                }
            int temp=a[index];
            a[index]=a[i];
            a[i]=temp;
        }
        for(int i=0;i<len;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        system("pause");
        return 0;
    }

     3.插入排序

    #include<iostream>
    using namespace std;
    
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    
    void insert(int i,int j,int *a)//j>i,a[j]为要插入的元素
    {
        int temp=a[j];
        for(int k=j;k>i;k--)
            a[k]=a[k-1];
        a[i]=temp;
    }
    
    int main()
    {
        int len=sizeof(a)/sizeof(int),sorted_index=1;
        for(int i=0;i<len;i++)
            cout<<a[i]<<' ';
        cout<<endl;
        for(int i=0;i<len-1;i++)
            {
                for(int j=0;j<sorted_index;j++)
                {
                    if(a[j]<=a[i+1])
                        continue;
                    else
                        insert(j,i+1,a);
                    
            }
            for(int k=0;k<len;k++)
                cout<<a[k]<<' ';
            cout<<endl;
            sorted_index++;
        }
        system("pause");
        return 0;
    }

     4.快速排序

    //快速排序
    void quick_sort(int s[], int l, int r)
    {
        if (l < r)
        {
            //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
            int i = l, j = r, x = s[l];
            while (i < j)
            {
                while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
                    j--;  
                if(i < j) 
                    s[i++] = s[j];
                
                while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
                    i++;  
                if(i < j) 
                    s[j--] = s[i];
            }
            s[i] = x;
            quick_sort(s, l, i - 1); // 递归调用 
            quick_sort(s, i + 1, r);
        }
    }
    因为弱小,所以要变强,因为不想灭亡,所以选择战斗
  • 相关阅读:
    [整理]Cadence 生成带有网络追踪的 PDF 原理图
    [整理]FSM 有限状态机
    [原创]Quartus 中调用 Modelsim 波形仿真
    [原创]SPI 协议介绍以及基于 Verilog 的 IP 核实现
    [原创]Verilog 代码编程规范(个人用)
    [算法]线段树
    [算法]tarjan
    poj3280
    poj 3258 River Hopscotch
    [poj 1251]Jungle Roads
  • 原文地址:https://www.cnblogs.com/cmjason/p/3923971.html
Copyright © 2020-2023  润新知