冒泡排序原理以及算法

冒泡排序的主要思路:

我们把要排序的数组A = {3,4,2,1} 看成一组水泡, <!--[endif]-->就像冒泡一样,轻的在上面,重的在下面,换成数据,就是小的在上面,大的在下面。 我们先把最轻的冒出到顶端,然后冒出第二轻的在最轻的下面,接着冒出第三轻的。依次内推。直到所有都冒出来了为止。
3.我们怎么做到把最轻的放在顶端呢?我们从最底下的数据开始冒,如果比他上面的数据小,就交换(冒上去),然后再用第二第下的数据比较(此时他已经是较轻的一个),如果他比他上面的小,则交换,把小的冒上去。直到比到第一位置,得到的就是最轻的数据咯,这个过程就像是冒泡一样,下面的和上面的比较,小的冒上去。大的沉下来。呵呵。

C++代码:

#include <stdio.h>
#include <stdlib.h>

//冒泡排序, pnData要排序的数据, nLen数据的个数
int BubbleSort(int* pnData, int nLen)
{
    bool isOk = false;        //设置排序是否结束的哨兵

    //i从[0,nLen-1)开始冒泡,确定第i个元素
    for (int i = 0; i < nLen - 1 && !isOk; ++i)
    {
        isOk = true;        //假定排序成功

        //从[nLen - 1, i)检查是否比上面一个小,把小的冒泡浮上去
        for (int j = nLen- 1; j > i; --j)
        {
            if (pnData[j] < pnData[j - 1])    //如果下面的比上面小,交换
            {
                int nTemp = pnData[j];
                pnData[j] = pnData[j - 1];
                pnData[j - 1] = nTemp;
                isOk = false;
            }
        }
    }

    return 1;
}

int main()
{
    int nData[10] = {4,10,9,8,7,6,5,4,3,2};    //创建10个数据,测试
    BubbleSort(nData, 10);        //调用冒泡排序

    for (int i = 0; i < 10; ++i)        
    {
        printf("%d ", nData[i]);
    }

    printf("\n");
    system("pause");
    return 0;
}


Java代码:
public class BubbleSort
 4{
 5    
 6    
 7    public static void main(String[] args){
 8        int[] values ={
 9                3,1,6,2,9,0,7,4,5
10        };
11        
12        sort(values);
13        for(int i=0; i < values.length; ++i){
14            
15            System.out.println("Index: " + i + "Value: " + values[i]);
16            
17        }
18        
19        
20    }
21    
22    
23    public static void sort(int[]  values){
24        
25        
26        int temp;
27        
28        for(int i=0 ; i < values.length ; ++i){
29            
30            for(int j=0; j <values.length - i - 1; ++j){
31                
32                if(values[j] > values[j + 1]){
33                    temp = values[j];
34                    values[j] = values[j + 1];
35                    values[j + 1] = temp;
36                    
37                    
38                    
39                }
40                
41                
42                
43            }
44            
45            
46        }
47    }
48
49}




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值