java 冒泡排序 经典算法题

//        冒泡排序:经典算法题。
//        有一组数字 2,10,8,20,11,把这组数按照从大到小的顺序排列出来。20,11,10,8,2
//        2,10,8,20,11
//        找出最大的数,放到第一位(1,2,3,4,5)
//        20,10,8,2,11
//        从剩下的4个数中,找最大的(2,3,4,5)
//        20,11,8,2,10
//        从剩下的3个数中,找最大的(3,4,5)
//        20,11,10,2,8
//        从剩下的2个数中,找最大的(4,5)
//        20,11,10,8,2

上面是老师给的步骤,我没仔细看  先自己想了想

int[] a = {2,10,8,20,11};
        boolean panDuan = true;
        int num = 0;

        System.out.println("输出原数组:");        //输出原数组
        for (int i : a) {
            System.out.print(i+" ");
        }
        System.out.println();
        while(panDuan)                       //最外层循环 设置成死循环,只有当内层循环判定条件满足后才跳出循环
        {
            for(int i = 0 ; i<4 ;i++)        //i为 数组下标,因为4是最后一位,如果前面运行正常,是不需要再比较的.所以范围设置为i<4就可以了
            {
                for(int j = 4 ; j>=0 ;j--)    // j同为数组下标,数组下标为i的元素,与数组中的元素,以倒序的顺序依次比较.
                {
                    if(i == j || i > j)            //当i = j 或者 i>j时,如果前面运行正确,是不需要再比较的 ,并且不继续运行下去,所以跳出变量为j的循环,继续执行变量为i的循环
                    {
                        break ;
                    }else if(a[i]<a[j])            //当满足条件,交换两个元素的位置
                    {

                        a[i] = a[i]+a[j];
                        a[j] = a[i] - a[j];
                        a[i] = a[i] - a[j];
                    }
                }
            }
            for(int k = 0 ; k <4 ; k++)            //检测循环   用来判断 现在的数组是否达到条件
            {
                for(int l = 4 ;l >= 0 ; l--)
                {
                    if(k == l || k > l)
                    {
                        break ;
                    }else if(a[k]>a[l])            //判断大小
                    {
                        num++;                   //如果条件正确,num+1
                    }
                }
            }
            if(num == 10)                        //如果条件都正确,那么num应该加10次,所以 当num=10,将布尔值的panDuan值改成false,就可以跳出while循环.
            {
                panDuan = false;
            }
            num = 0;                            //如果一次循环达到想要的数组,将num归0,继续循环直到正确.
        }                                             //while 结束括号
        System.out.println("输出排序后数组:");
        for (int m : a) {
            System.out.print(m+" ");
        }

    }
}

(初学java,博客记录为主,轻喷,错误想必不少,如果您能指出,不胜感激,部分内容非原创,来源于百度)

原文地址:https://www.cnblogs.com/j1639797/p/9581722.html

时间: 2024-08-02 20:23:28

java 冒泡排序 经典算法题的相关文章

JAVA的经典算法题

资料来源:http://blog.csdn.net/l1028386804/article/details/51097928 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... public class Demo01 { public static void main(String args[]) { for

java面试 - 经典算法题

题目一: public class testClockwiseOutput { //顺时针打印一个矩阵 @Test public void test(){ int[][] num = new int[100][100]; int n = 4; int count =1; for(int i=0;i<n;i++){ for(int j =0;j<n;j++){ num[i][j]=count++; } } output(num,0,n-1); } public void output(int[]

经典算法题每日演练——第二十四题 梳排序

原文:经典算法题每日演练--第二十四题 梳排序 这篇再看看一个经典的排序,梳排序,为什么取名为梳,可能每个梳都有自己的gap吧,大梳子gap大一点,小梳子gap小一点. 上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化. 冒泡排序上我们的选择是相邻的两个数做比较,就是他们的gap为1,其实梳排序提出了不同的观点,如果将这里的gap设置为一定的大小, 效率反而必gap=1要高效的多. 下面我们看看具体思想,梳排序有这样一个1.

经典算法题每日演练——第二十三题 鸡尾酒排序

原文:经典算法题每日演练--第二十三题 鸡尾酒排序 这篇我们继续扯淡一下鸡尾酒排序,为了知道为啥取名为鸡尾酒,特意看了下百科,见框框的话,也只能勉强这么说了. 要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,我想作为码农的话,不可能不知道冒泡排序, 冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大 到小排序. 从图中可以看到,第一次正向比较,我们找到了最大值9. 第一次反向比较,我们找到了最小值1. 第二次正向

经典算法题每日演练——第十六题 Kruskal算法

原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0,1,2,3,4,5}这样6个节点,我们知道Prim算法构建生成树是从”顶点”这个角度来思考的,然后采用“贪心思想” 来一步步扩大化,最后形成整体最优解,而Kruskal算法有点意思,它是站在”边“这个角度在思考的,首先我有两个集合. 1. 顶点集合(vertexs): 比如M集合中的每个元素都可以认

经典算法题每日演练——第三题 猴子吃桃

原文:经典算法题每日演练--第三题 猴子吃桃 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多少个桃子? 分析: 这是一套非常经典的算法题,这个题目体现了算法思想中的递推思想,递归有两种形式,顺推和逆推,针对递推,只要 我们找到递推公式,问题就迎刃而解了. 令S10=1,容易看出 S9=2(S10+1), 简化一下 S9=2S10+2 S8=2S

经典算法题每日演练——第二十题 三元组

原文:经典算法题每日演练--第二十题 三元组 我们知道矩阵是一个非常强大的数据结构,在动态规划以及各种图论算法上都有广泛的应用,当然矩阵有着不足的地方就是空间和时间 复杂度都维持在N2上,比如1w个数字建立一个矩阵,在内存中会占用1w*1w=1亿的类型空间,这时就会遇到outofmemory...那么面 临的一个问题就是如何来压缩矩阵,当然压缩的方式有很多种,这里就介绍一个顺序表的压缩方式:三元组. 一:三元组 有时候我们的矩阵中只有零星的一些非零元素,其余的都是零元素,那么我们称之为稀疏矩阵,

经典算法题每日演练——第十七题 Dijkstra算法

原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典策略,当然有的问题我们可以用贪心来寻求整体最优解,在图论中一个典型的贪心法求最优解的例子就莫过于“最短路径”的问题. 一:概序 从下图中我要寻找V0到V3的最短路径,你会发现通往他们的两点路径有很多:V0->V4->V3,V0->V1->V3,当然你会认为前者是你要找的最短 路径,那如

经典算法题每日演练——第七题 KMP算法

原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树是变态级的,那么kmp算法比红黑树还要变态,很抱歉,每次打kmp的时候,输 入法总是提示“看毛片”三个字,嘿嘿,就叫“看毛片算法”吧. 一:BF算法 如果让你写字符串的模式匹配,你可能会很快的写出朴素的bf算法,至少问题是解决了,我想大家很清楚的知道它的时间复 杂度为O(MN),原因很简单,主串和模