排序方法

来源:互联网 发布:西瓜趣味编程营 编辑:程序博客网 时间:2024/05/22 13:54

冒泡排序

void bubble_sort(int a[],int n)
{
    int i,j;
    for(i = 0;i < n;i++)//循环次数
    {
        bool flag = true;
        for(j = 0;j < n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                a[j] ^= a[j+1];
                a[j+1] ^= a[j];
                a[j] ^= a[j+1];
                flag = false;
            }
        }
        if(flag)
        {
            break;
        }
    }
}

选择排序

void select_sort(int a[],int n)
{
    int i,j;
    for(i = 0;i < n-1;i++)
    {
        int min_index = i;
        for(j = i+1;j < n;j++)
        {
            if(a[j] < a[min_index])
            {
                min_index = j;
            }
        }
        if(min_index != i)
        {
            a[i] ^= a[min_index];
            a[min_index] ^= a[i];
            a[i] ^= a[min_index];
        }
    }
}

插入排序

void insert_sort(int a[],int n)
{
    int i,j;
    for(i = 1;i < n;i++)
    {
        int temp = a[i];
        for(j = i; j > 0;j--)
        {
            if(a[j-1] > temp)
            {
                a[j] = a[j-1];
            }else
            {
                break;
            }
        }
        a[j] = temp;
    }
}

shell排序

void shell_sort(int a[],int n)
{
    int i,j;
    int step = n/2;
    for(step;step > 0;step /= 2)
    {
        for(i = step;i < n;i++)
        {
            int temp = a[i];
            for(j = i;j >= step;j -= step)
            {
                if(a[j-step] > temp)
                {
                    a[j] = a[j-step];
                }else
                {
                    break;
                }
            }
            a[j] = temp;
        }
    }
}

归并排序

void merge_sort(int a[],int aSize,int b[],int bSize,int c[])
{
    int cSize = aSize + bSize;
    int i=0, j=0, k=0;
    while(i < aSize && j < bSize)
    {
        if(a[i] < b[j])
        {
            c[k++] = a[i++];
        }else
        {
            c[k++] = b[j++];
        }
    }
    while(i < aSize)
    {
        c[k++] = a[i++];
    }
    while(j < bSize)
    {
        c[k++] = b[j++];
    }
}

快速排序

void quick_sort(int a[],int start,int end)
{
    if(start >= end)
        return;
    int low = start;
    int height = end;
    int key = a[start];
    while(low < height)
    {
        while(low < height && a[height] >= key)
        {
            height--;
        }
        a[low] = a[height];
        while(low < height && a[low] <= key)
        {
            low++;
        }
        a[height] = a[low];
    }
    a[low] = key;
    quick_sort(a,start,low-1);    
    quick_sort(a,height+1,end);
}

二分查找

int binary_search(int a[],int n,int data)
{
    int low = 0;
    int height = n-1;
    while(low <= height)
    {
        int mid = (low + height)/2;
        if(a[mid] == data)
        {
            return mid;
        }
        if(a[mid] < data)
        {
            low = mid +1;
        }else
        {
            height = mid -1;
        }
    }    
    return -1;
}

0 0