排序算法学习(实现)

推荐一个网站给你们,知乎上看到的,亲测好用html

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

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.选择排序ui

#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.插入排序spa

#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.快速排序code

//快速排序
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);
    }
}