Java之冒泡排序方法实例讲解
- 格式:docx
- 大小:21.34 KB
- 文档页数:2
Java冒泡排序法实现 “冒泡排序法”可以将⼀个⽆序的数组按照从⼩到⼤的顺序或者是从⼤到⼩的顺序进⾏排序,是⼀种较为常见的排序算法,因为数据从⼩到⼤或者从⼤到⼩地到数列头或者数列末的过程称为“冒泡”。
对于冒泡排序我觉得最重要的两点就是:(1)需要重新排序的次数,即循环的次数,这个是根据数组的序列的⼤⼩来定的,⽐如数组的⼤⼩为n的话,需要循环的次数就为(n - 1)次;(2)另外⼀个就是每次循环需要进⾏数据之间⽐较的次数,每次排序后可以确定出最⼤或者最⼩的那个数据,下次循环时就不⽤再进⾏⽐较了,所以每次进⾏⽐较的次数是(n - i); 对于⼀个数组⽆序的情况,⽆论是从⼤到⼩排序还是从⼩到⼤冒泡,假如是⼀个n个数据的数组,那么第⼀个数据⽆需跟⾃⼰进⾏⼤⼩⽐较了,那么需要进⾏⽐较的是跟余下的n - 1个数据,所以需要重新进⾏排序的循环次数是n - 1次,在每次循环的过程中需要进⾏的⽐较次数的确定也是⼀个关键,在第⼀次循环的过程可以确定(以从⼩到⼤为例)最⼤的那个数那么在下⼀次的循环中就不⽤再进⾏⽐较了。
下⾯这个实例是对数组进⾏从⼩到⼤排序:1package ren.arrayListSortedTest;23import java.util.Scanner;45public class ArraySortedTest {6//排序7public static void sort(int [] unSortedArray){8for(int i=1;i<unSortedArray.length;i++){9for(int j=0;j<unSortedArray.length-i;j++){10if(unSortedArray[j]>unSortedArray[j+1]){11int temp = unSortedArray[j];12 unSortedArray[j]=unSortedArray[j+1];13 unSortedArray[j+1]=temp;14 }15 }16 }1718 }19//打印(已排序好)20public static void print(int [] unPrintedArray){21for(int i=0;i<unPrintedArray.length;i++){22 System.out.print(unPrintedArray[i]+",");23 }24 }25public static void main(String[] args){26 Scanner sc = new Scanner(System.in);27//第⼀个键盘输⼊指定数组开辟的⼤⼩28int [] unSortedArray = new int[sc.nextInt()];29for(int i=0;i<unSortedArray.length;i++){30//键盘输⼊为指定数组的内容31 unSortedArray[i]=sc.nextInt();32 }33 ArraySortedTest.sort(unSortedArray);34 ArraySortedTest.print(unSortedArray);35 System.out.println("排序执⾏结束..");36 }37 } 执⾏结果: 通过键盘输⼊5确定要开辟的数组的容量是5个数据的数组,然后再指定每个元素的⼤⼩是多少,这⾥的原始的数组是[34,23,11,65,24],排序后结果为[11,23,24,34,65]。
c 冒泡排序法经典代码冒泡排序是一种简单的排序算法。
它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
以下是一个用C语言实现的冒泡排序算法的经典代码:```c#include <stdio.h>void bubbleSort(int array[], int size) {for (int step = 0; step < size - 1; ++step) {for (int i = 0; i < size - step - 1; ++i) {if (array[i] > array[i + 1]) {// 交换元素如果前一个元素大于后一个int temp = array[i];array[i] = array[i + 1];array[i + 1] = temp;}}}}// 在主函数中打印排序后的数组void printArray(int array[], int size) {for (int i = 0; i < size; ++i) {printf("%d ", array[i]);}printf("\n");}int main() {int data[] = {-2, 45, 0, 11, -9};int size = sizeof(data) / sizeof(data[0]);bubbleSort(data, size);printf("Sorted Array in Ascending Order:\n");printArray(data, size);}```以上代码中,`bubbleSort`函数用于执行冒泡排序,`printArray`函数用于打印排序后的数组。
在主函数`main`中,我们首先定义了一个待排序的数组,然后计算了数组的大小,然后调用`bubbleSort`函数进行排序,最后调用`printArray`函数打印排序后的数组。
一、选择题1.一个.java文件中可以有()个public类。
A.一个B.两个C.多个D.零个2.一个算法应该是()A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()A.唯一性B.有穷性C.有0个或多个输入D.有输出4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。
若采用冒泡排序算法对其进行排序,则完成第二遍时的结果是()A.3,15,130,20,98,67B.3,15,20,130,98,67C.3,15,20,67,130,98 D.3,15,20,67,98,1305.下列关于算法的描述,正确的是()A.一个算法的执行步骤可以是无限的B.一个完整的算法必须有输出C.算法只能用流程图表示D.一个完整的算法至少有一个输入6.Java Application源程序的主类是指包含有()方法的类。
A、main方法B、toString方法C、init方法D、actionPerfromed方法7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是()A.分治法B.减治法C.蛮力法D.变治法8.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。
A、import java.awt.* ;B、import java.applet.Applet ;C、import java.io.* ;D、import java.awt.Graphics ;9.计算某球队平均年龄的部分算法流程图如图所示,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入结束。
图中空白处理框①和②处应填入的是()A.①sum ←sum + d B.①sum ←sum + c②c ←c + 1②c ←c + 1C.①sum ←sum + d D.①sum ←sum + c②d ←d + 1 ②d ←d + 110.报名参加冬季越野赛跑的某班5位学生的学号是:5,8,11,33,45。
Java实现冒泡排序问题描述利⽤冒泡排序把⼀列数组按从⼩到⼤或从⼤到⼩排序(⼀)、冒泡排序思想以从⼩到⼤为例:1、第⼀轮的冒泡,从第⼀个数开始,与相邻的第⼆个数相⽐,若第⼀个数更⼤,则交换⼀⼆的位置,反之不动,结束后进⾏⼆三位置两个数的⽐较,同理如此反复,直到把最⼤的⼀个数排到最后⼀个位置。
2、进⾏第⼆轮的冒泡,依旧从第⼀个数开始,依次⽐较当前的⼀⼆、⼆三······位置的数,直到把第⼆⼤的数排到倒数第⼆位。
3、如此循环进⾏,直到所有数按从⼩到⼤排列。
(⼆)、问题分析1.输⼊数组根据⽤户输⼊的进⾏排序的数字数量n,建⽴⼀个长度为n的数组public static void main (String[] args){int n,m;Scanner sc = new Scanner(System.in);System.out.println("请输⼊你想排序的数量n");n=sc.nextInt();int [] arrary = new int[n];System.out.println("请输⼊"+n+"个数,并⽤空格隔开");for(int i=0;i<arrary.length;i++){arrary[i]=sc.nextInt();}2.输⼊如何排序设置两条路径:m=1为从⼩到⼤,m=2为从⼤到⼩,m=其他提醒⽤户重新输⼊System.out.println("请问你想:1.从⼩到⼤ 2.从⼤到⼩排序?");m=sc.nextInt();while (m!=1 && m!=2 ){System.out.println("输⼊有误请再次输⼊");m = sc.nextInt();continue;}3.排序算法(1)数组长度 arrary.length 也就是⽤户输⼊的 n(2)j 表⽰第 j+1 轮排序,这⾥⾯n-1轮排序就已⾜够(3)k 表⽰第 k+1 个位置,arrary[k] 表⽰第 k+1 个位置的数(4)由于每⼀轮都能确定⼀个最⼤数排在最后,所以每⼀轮进⾏⽐较的数都会少⼀个,⽐较的次数也会少⼀个,所以是k<arrary.length-1-j(5)较⼤数与较⼩数交换位置的经典算法:若a>b; 则c=a; a=b; b=c;(6)从⼤到⼩排序只需把 arrary[k]>arrary[k+1] 换成 arrary[k]<arrary[k+1] 即可(7)选择进⾏何种排序,在 if 语句的判断框⾥加上此时m应该等于的值(8)因为要先选择进⾏何种排序,才能进⾏排序,所以把 m==1 放在 arrary[k]>arrary[k+1] 前⾯,且⽤短板与 && ,这样更易于理解(如果m≠1,则直接进⾏else if 的语句)(9)也可以 m==1 & arrary[k]>arrary[k+1] 或 arrary[k]>arrary[k+1] & m==1,但不能 arrary[k]<arrary[k+1] && m==2。
java学习心得体会java学习心得体会1进入达内,感觉蛮新鲜刺激的。
虽然之前在学校里开过Java课,我也迷迷糊糊考过了,但是我真的对学编程语言有些“畏惧”,但是达内老师一再让我放宽心,说都是面向没有基础的从最基础的开始教,只要用心一定能够学会。
后来随着课堂上老师认真的讲解和自己的专研,便发现原来java软件开发培训学习并不是那么枯燥无味,而且还很有趣,很长见识。
通过四个月的学习我才真正发现要学的东西还很多,以前掌握的软件知识少的可怜,很多基本东西都不懂。
在达内的培训这期间,通过老师的详细讲解,课堂上老师讲的基本上都能领会,并且在下午的上机练习中反复操作,加深印象。
能熟练的操作软件项目开发。
更加感到印象深刻的是,一直以来认为我对软件开发的兴趣更是越来越浓,甚至每天睡觉的时候脑袋都在代码,经过调整及时的改变了学习方法,翻书看以前学过的知识,又使我恢复了学习状态。
在达内的两三个月里,学习了数据库、网页制作及框架的相关知识。
授课知识很符合现在企业的要求,同时在学习期间安排项目制作,增加项目开发经验,这对今后就业时,有很大帮助。
在学习过程中,当自己写的一个程序解决所有错误和异常跑通时,会有非常非常大的成就感。
通过在达内四个多月的培训后,在达内科技的一次双选会上,我以熟练地技术被一家外企录取为一名定制班的学员,经过将近一个月的定制班的学习,顺利通过考核,在此我要对北京达内的全体老师说一声:老师,您辛苦了,谢谢您!新的生活马上就要开始了,在此,衷心感谢达内及达内的培训各位老师以及同学。
达内java培训没有让我们失望,我们也一定不会让达内失望,在今后的工作当中,我们一定会发扬达内精神,用我们的不懈努力来展现达内精神java学习心得体会2从大三开始算,我学习java已经有一年的时间了,不过虽然时间长,但是对于现在的我还是一个初学者,懂不了多少的java初学者。
期间曾迷茫过,曾困惑过,走了不少的弯路,老师布置的试验作业每次都是不会做,每次都是要问同学,这个代码什么意思啊?为什么用这条代码,用别的不行吗?甚至后来根本没耐心问,索性就复制同学的作业交上去。
20个java案例以下是20个Java案例,涵盖了不同的主题和功能。
每个案例都有一个简要的描述和示例代码。
1. 计算两个数的和。
描述,编写一个程序,计算两个整数的和并输出结果。
示例代码:java.int num1 = 10;int num2 = 5;int sum = num1 + num2;System.out.println("两个数的和为," + sum);2. 判断一个数是否为偶数。
描述,编写一个程序,判断一个整数是否为偶数,并输出结果。
示例代码:java.int num = 6;if (num % 2 == 0) {。
System.out.println(num + "是偶数。
");} else {。
System.out.println(num + "不是偶数。
");}。
3. 求一个数的阶乘。
描述,编写一个程序,计算一个正整数的阶乘,并输出结果。
示例代码:java.int num = 5;int factorial = 1;for (int i = 1; i <= num; i++) {。
factorial = i;}。
System.out.println(num + "的阶乘为," + factorial);4. 判断一个字符串是否为回文字符串。
描述,编写一个程序,判断一个字符串是否为回文字符串,并输出结果。
示例代码:java.String str = "level";boolean isPalindrome = true;for (int i = 0; i < str.length() / 2; i++) {。
if (str.charAt(i) != str.charAt(str.length() 1 i)) {。
isPalindrome = false;break;}。
⽤Java实现常见的8种内部排序算法⼀、插⼊类排序插⼊类排序就是在⼀个有序的序列中,插⼊⼀个新的关键字。
从⽽达到新的有序序列。
插⼊排序⼀般有直接插⼊排序、折半插⼊排序和希尔排序。
1. 插⼊排序1.1 直接插⼊排序/*** 直接⽐较,将⼤元素向后移来移动数组*/public static void InsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i]; //temp ⽤于存储元素,防⽌后⾯移动数组被前⼀个元素覆盖int j;for(j = i; j > 0 && temp < A[j-1]; j--) { //如果 temp ⽐前⼀个元素⼩,则移动数组A[j] = A[j-1];}A[j] = temp; //如果 temp ⽐前⼀个元素⼤,遍历下⼀个元素}}/*** 这⾥是通过类似于冒泡交换的⽅式来找到插⼊元素的最佳位置。
⽽传统的是直接⽐较,移动数组元素并最后找到合适的位置*/public static void InsertSort2(int[] A) { //A[] 是给定的待排数组for(int i = 0; i < A.length - 1; i++) { //遍历数组for(int j = i + 1; j > 0; j--) { //在有序的序列中插⼊新的关键字if(A[j] < A[j-1]) { //这⾥直接使⽤交换来移动元素int temp = A[j];A[j] = A[j-1];A[j-1] = temp;}}}}/*** 时间复杂度:两个 for 循环 O(n^2)* 空间复杂度:占⽤⼀个数组⼤⼩,属于常量,所以是 O(1)*/1.2 折半插⼊排序/** 从直接插⼊排序的主要流程是:1.遍历数组确定新关键字 2.在有序序列中寻找插⼊关键字的位置* 考虑到数组线性表的特性,采⽤⼆分法可以快速寻找到插⼊关键字的位置,提⾼整体排序时间*/public static void BInsertSort(int[] A) {for(int i = 1; i < A.length; i++) {int temp = A[i];//⼆分法查找int low = 0;int high = i - 1;int mid;while(low <= high) {mid = (high + low)/2;if (A[mid] > temp) {high = mid - 1;} else {low = mid + 1;}}//向后移动插⼊关键字位置后的元素for(int j = i - 1; j >= high + 1; j--) {A[j + 1] = A[j];}//将元素插⼊到寻找到的位置A[high + 1] = temp;}}2. 希尔排序希尔排序⼜称缩⼩增量排序,其本质还是插⼊排序,只不过是将待排序列按某种规则分成⼏个⼦序列,然后如同前⾯的插⼊排序⼀般对这些⼦序列进⾏排序。
java先进后出栈的代码在Java 中,可以使用`Stack` 类来实现先进后出(LIFO)的栈数据结构。
以下是一个简单的示例代码:```javaimport java.util.Stack;public class StackExample {public static void main(String[] args) {// 创建一个栈Stack<String> stack = new Stack<>();// 压栈(入栈)stack.push("Element 1");stack.push("Element 2");stack.push("Element 3");// 出栈while (!stack.isEmpty()) {String element = stack.pop();System.out.println("出栈: " + element);}}}```在这个例子中,我们使用`Stack<String>` 来创建一个字符串类型的栈。
通过`push` 方法将元素压入栈,通过`pop` 方法将元素从栈顶弹出。
使用`isEmpty` 方法检查栈是否为空。
注意:`Stack` 类在Java 中是线程安全的,但它被标记为过时(deprecated)。
在实际应用中,更推荐使用`Deque` 的实现类`LinkedList` 作为栈,因为`LinkedList` 实现了`Deque` 接口,同时具有栈和队列的特性。
```javaimport java.util.LinkedList;import java.util.Deque;public class StackExample {public static void main(String[] args) {// 创建一个栈Deque<String> stack = new LinkedList<>();// 压栈(入栈)stack.push("Element 1");stack.push("Element 2");stack.push("Element 3");// 出栈while (!stack.isEmpty()) {String element = stack.pop();System.out.println("出栈: " + element);}}}```这个例子中,我们使用`LinkedList` 来实现栈的功能。