冒泡排序:

冒泡排序可以分成两种:主动冒泡(从左到右)和被动冒泡(从右到左):

重复性的两两循环,直到一次排序结束

详情请查看代码

代码中包含了两种冒泡排序算法,分别为从左到右和从右到左的算法

/**
冒泡排序和选择排序 
*/

#include<stdio.h> 

void swap(int* a,int* b)
{
    int c;
    c = *a;
    *a = *b;
    *b = c;
}

int main()
{
    int nums[10] = {123,225,12,1,36,35,14,98,999,30};
    int i,j;
    /*
    从后面冒泡 (被动冒泡)
    */
    /*for(i = 0;i<10;i++)
    {
        for(j = 9;j-i>0;j--)
        {
            if(nums[j]<nums[j-1])
            {
                swap(&nums[j],&nums[j-1]);
            } 
        }
    }*/
    /*
    从前面冒泡 
    */
    
    for(i =10;i>0;i--)
    {
        for(j = 0;j<i-1;j++)
        {
            if(nums[j]>nums[j+1])
            {
                swap(&nums[j],&nums[j+1]);
            }         
        }
    }
    
    for(i = 0;i<10;i++)
    {
        printf("%d ",nums[i]);
    }
    printf("\n");
    return 0;
}

选择排序:

每次都是找出一个最小的数字进行排序

一杆到底:找出最小的数和每个数字排序

下面请查看代码:


#include<stdio.h> 

void swap(int* a,int* b)
{
    int c;
    c = *a;
    *a = *b;
    *b = c;
}

int main()
{
    int nums[10] = {123,225,12,1,36,35,14,98,999,30};
    int i,j;

    for(i = 0;i<10;i++)
    {
        for(j = i+1;j<10;j++)
        {
            if(nums[i]>nums[j])
            {
                swap(&nums[i],&nums[j]);
            }
        }
    }
    
    for(i = 0;i<10;i++)
    {
        printf("%d ",nums[i]);
    }
    printf("\n");
    return 0;
}

 

如有问题,请指出!

  

版权声明:本文为Rect-yy-dgs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/Rect-yy-dgs/p/8063925.html