码迷,mamicode.com
首页 > 其他好文 > 详细

各种常见排序实现代码

时间:2014-07-18 15:36:53      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   art   io   

主要包括冒泡、简单选择、插入、堆排、归并、快排这几种。以后会慢慢补充。

可能有错,欢迎指出。

#include<iostream>
#include<cstdio>
using namespace std;
//升序
int arr[10000],length;

//冒泡排序
void Bubble_Sort(int *Arr,int length)
{
    bool update;
    while(1)
    {
        update=false;
        for(int i=0; i<length-1; ++i)
            if(Arr[i]>Arr[i+1])
            {
                int temp=Arr[i];
                Arr[i]=Arr[i+1];
                Arr[i+1]=temp;
                update=true;
            }
        if(!update) break;
    }
}

//简单选择排序
void SimpleEelect_Sort(int *Arr,int length)
{
    for(int i=0; i<length; ++i)
    {
        int minn=i;
        for(int j=i+1; j<length; ++j)
            if(Arr[j]<Arr[minn])
                minn=j;
        if(minn!=i)
        {
            int temp=Arr[i];
            Arr[i]=Arr[minn];
            Arr[minn]=temp;
        }
    }
}

//直接插入排序
void Insert_Sort(int *Arr,int length)
{
    for(int i=1; i<length; ++i)
    {
        int key=Arr[i];
        int j;
        for(j=i-1; j>=0; --j)
        {
            if(Arr[j]<=key)  break;
            else Arr[j+1]=Arr[j];
        }
        Arr[j+1]=key;
    }
}

//堆排
void HeapAdjust(int *Arr,int rt,int length)
{
    int largest=rt;
    int key=Arr[rt];
    while(1)
    {
        int lc=rt*2+1,rc=rt*2+2;
        if(lc<length&&Arr[lc]>Arr[largest]) largest=lc;
        if(rc<length&&Arr[rc]>Arr[largest]) largest=rc;
        if(largest==rt)  break;
        Arr[rt]=Arr[largest];
        Arr[largest]=key;
        rt=largest;
    }
}
void HeapBuild(int *Arr,int length)
{
    for(int i=(length-1)/2; i>=0; --i)
        HeapAdjust(Arr,i,length);
}
void Heap_Sort(int *Arr,int length)
{
    HeapBuild(Arr,length);
    for(int i=length-1; i>=1; --i)
    {
        int temp=Arr[i];
        Arr[i]=Arr[0];
        Arr[0]=temp;
        HeapAdjust(Arr,0,i);
    }
}

//归并排序
int A[10000];
void Merge_Sort(int *Arr,int L,int R)
{
    if(L<R)
    {
        int M=(L+R)/2;
        Merge_Sort(Arr,L,M);
        Merge_Sort(Arr,M+1,R);
        int p=L,q=M+1,i=L;
        while(p<=M||q<=R)
        {
            if(q>R||(p<=M&&Arr[p]<=Arr[q])) A[i++]=Arr[p++];
            else A[i++]=Arr[q++];
        }
        for(int j=L; j<=R; ++j)
            Arr[j]=A[j];
    }
}

//快速排序
int partition(int *Arr,int L,int R)
{
    int key=Arr[R];
    int i=L-1;
    for(int j=L; j<=R; ++j)
        if(Arr[j]<=key)
        {
            i++;
            int temp=Arr[j];
            Arr[j]=Arr[i];
            Arr[i]=temp;
        }
    return i;
}
void Quick_Sort(int *Arr,int L,int R)
{
    if(L<R)
    {
        int mid=partition(Arr,L,R);
        Quick_Sort(Arr,L,mid-1);
        Quick_Sort(Arr,mid+1,R);
    }

}

void read()
{
    scanf("%d",&length);
    for(int i=0; i<length; ++i)
        scanf("%d",&arr[i]);
}
void output()
{
    for(int i=0; i<length; ++i)
        printf("%d ",arr[i]);
    printf("\n");
}

int main()
{
    read();
    Quick_Sort(arr,0,length-1);
    output();
    return 0;
}

各种常见排序实现代码,布布扣,bubuko.com

各种常见排序实现代码

标签:style   blog   color   os   art   io   

原文地址:http://www.cnblogs.com/kkkwjx/p/3852195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!