码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡排序

时间:2014-12-08 17:23:28      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

#include <stdio.h>

#define True  1
#define False 0

void BubbleSort(int A[] , int N);
void BubbleSort2(int A[] , int N);
void BubbleSort3(int A[] , int N);

int main(int argc, const char * argv[]) {
   
    int A[15] = {1,2,3,13,14,4,5,6,7,8,9,10,11,12,15};
    
    BubbleSort3(A , 15);
    for (int i = 0 ; i < 15; i++)
        printf("%d " , A[i]);
    return 0;
}

//BubbleSort 的最基础的版本!
void BubbleSort(int A[] , int N)
{
    int i , j ;
    int Tmp ;
    
    for (i = 0 ; i < N ;  i ++ )
        for (j = 1 ; j < N - i ; j ++)
            if (A[ j - 1 ] > A[ j ]) {
                Tmp = A[j];
                A[j] = A[j - 1 ] ;
                A[j - 1] = Tmp ;
            }
}

//BubbleSort 的改进版本一
// 此改进版是加入一个信号标志flag
// 如果在一趟过程中发生了交换,则置flag = 1
// 否则如果一趟过程都没发生交换,则数组已经排序好
void BubbleSort2(int A[] , int N)
{
    int i , j ;
    int flag = True ;
    int Tmp ;
    
    i = 0 ;
    while (flag) {
        flag = False ;
        for (j = 1 ; j < N - i ; j ++)
            if (A[j - 1] > A[j] ) {
                Tmp = A[j];
                A[j] = A[j -1];
                A[j-1] = Tmp ;
                flag = True ;
            }
        i++ ;
    }
}

//冒泡排序改进版三
//flag记录最后一次交换发生的位置,即后面的已经是有序的了
//不需要再交换了,
void BubbleSort3(int A[] , int N)
{
    int i , j ;
    int flag = N ;
    int Tmp ;
    
    while (flag) {
        i = flag ;
        flag = 0 ;   //注意这里应该先设置为0 ,不然就存在死循环回不去了
        for (j = 1; j < i; j ++)
            if (A[j - 1] > A[j]) {
                Tmp = A[j] ;
                A[j] = A[j - 1 ];
                A[j - 1] = Tmp ;
                flag = j;
            }
    }
}

 

冒泡排序

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/Big-Ding/p/4151168.html

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