C语言数据结构学习笔记(3)--冒泡排序

排序也是写程序中比较常用的算法,一定要掌握的。有很多排序方法,一般的只要掌握几个常用的就行了。冒泡是我接触最早的排序,也比较如以理解。介绍一下关键点:例如有一个整数数组 int a [6] = {4, 9, 2, 6, 1, 3},按从小到大排列。

1。冒泡排序是把相邻(a[i], a[i+1])的两个数比较,把较大的数放在后面。

2.循环次数:a[6]数组的长度是6,那只需比较5次就可以排好了,第一趟选出最小的一个放在第一个位置,第二趟选出第二小的放在第二个位置。最后一个不用比较一定是最大的。所以只需5次。

#include<stdio.h>
/*
time:2015/6/22
@author:liuxinquan
*/

//冒泡排序
void bubble_sort(int a[])
{
    int i, j, k;
    for(i=1; i<6; i++)  //一共比较5次,i为1时,选出最小的一个
    {
        for(j=5; j>=i; j--) //从最后一个数开始查看是否最小
        {
            if(a[j]<a[j-1]) //相邻的两个数比较,注意还有一个排序在这不一样
            {
                //这4行完成交换
                int t;
                t= a[j];
                a[j] = a[j-1];
                a[j-1] = t;

            }
        }
    }
    //输出数组
   for(k=0; k<6; k++)
   {
       printf("%d ", a[k]);
   }


}

//主函数,测试。
int main(void)
{
    int a[6] = {4, 9, 2, 6, 1, 3};

    bubble_sort(a);
}



另一种冒泡排序,也算是选择排序。对比两个不同处:

#include<stdio.h>

void sample_sort(int a[])
{
    int i, j, k;

    for(i=0; i<5; i++) //一共比较5次,i为1时,把第一个位置上的数和后面的依次比较
    {

        for(j=i+1; j<6; j++)    //从要比较的数后面的数开始,就是第一个数先和第二个数开始比较,
        {
            if(a[i]>a[j])   //和上面的区别,比较数的位置不变,就是一直是a[i]位置和后面的数比较
            {
                int t;
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }

    //输出数组
   for(k=0; k<6; k++)
   {
       printf("%d ", a[k]);
   }
}

//主函数,测试。
int main(void)
{
    int a[6] = {4, 9, 2, 6, 1, 3};
    sample_sort(&a);
}




你可能感兴趣的:(数据结构,算法,冒泡排序,C语言)