c语言排序及优化

来源:互联网 发布:wordpress seo 编辑:程序博客网 时间:2024/06/04 19:48
冒泡排序及优化代码
#include <stdio.h>
#define n  5
int main(void)
{
    int a[n]={6,3,9,2,1};
    for(int i = 0; i < n - 1; i++)
    {
        int flag = 1;
        for(int j = 0; j < n - 1 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                a[j]  = a[j] ^ a[j + 1];
                a[j+1] = a[j] ^ a[j + 1];
                a[j] =  a[j] ^ a[j + 1];
                flag = 0;
            }
        }
        if (flag == 1)
            break;

    }
    for(int i =0;i<n;i++)
    {

        printf("%d\n",a[i]);
    }
    return 0;
}

选择排序未优化:
#include <stdio.h>
#define N   5
int main(void)
{
    int array[N] = {5,4,3,2,1};
    int tmp;
    for(int i=0; i<N-1; i++)
    {
        for(int j=i+1; j<N; j++)
        {
            if(array[i]>array[j])
            {
                tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }
        }
    }
    for(int i=0; i<N; i++)
    {
        printf("%d\t",array[i]);
    }
    return 0;
}
优化后的选择排序:
#include <stdio.h>
#define N   5
//在比较次数一定的情况下,减少了交换的次数而,提高了效率
int main(void)                                 //  0
{                                              //       idx=1
    int array[N] = {5,4,3,2,1};                // 2     10   3   4    5
                                               //      j=1    2   3    4
    int tmp ,idx;
    for(int i=0; i<N-1; i++)
    {
        idx = i;
        for(int j=i+1; j<N; j++)
        {
            if(array[idx]>array[j])
            {
               idx = j;
            }
        }
        if(idx != i)
        {
            tmp = array[i];
            array[i] = array[idx];
            array[idx] = tmp;
        }
    }
    for(int i=0; i<N; i++)
    {
        printf("%d\t",array[i]);
    }
    return 0;
}
原创粉丝点击