java12-6 冒泡排序法和选择排序法

1、冒泡排序法
    相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

  分析:
    第一次比较排序的结果:会把其中最大的数据排到最大的索引处
    第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,
    所以这次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
    第三次比较排序的结果:跟第二次差不多,只是这次要进行比较的数据比数组里面的元素的数据个数还少了2个,
    第四次:少3个..
  综上所述,要使数组里面的数据按照从小到大排序,总的比较的次数会比数组的长度-1次,
       而随着比较的次数的增加,每次要进行比较的数据依次减少,也就是
          for(int x =0; x < arr.length - 1 ;x++)这个是总的比较的次数
              {
            for(int y =0; y < arr.length - 1 - x; x++){ 这个就是随着次数的增加,每次要进行比较的数据的个数
                }
              }
  为了方便对多个数组进行冒泡排序,所以把它写成一个方法:
                    两要素:
                      a:返回类型:void
                      b:参数列表:int[] arr

 1 public class ArrayTest1 {
 2
 3 public static void main(String[] args) {
 4
 5 //建立一个数组
 6 int[] arr = {23,11,45,78,1,42};
 7
 8
 9 System.out.println("数组排序前:");
10 getArray(arr);
11 //调用排序方法
12 bubbleSort(arr);
13 System.out.println("\n数组排序后:");
14 getArray(arr);
15
16 }
17
18 //定义冒泡排序的方法
19 public static void bubbleSort(int[] arr){
20 //确定要进行比较的次数
21 // arr.length - 1是为了防止数据越界
22 // arr.length - 1 - x是为了减少比较的次数
23 for(int x = 0;x < arr.length - 1; x++){
24 //定义每次要比较的数据随着比较的次数的减少而减少
25 for(int y = 0;y < arr.length - 1 - x ; y++){
26 //每次比较后,要对每个数组里的元素进行比较,并排序
27 if(arr[y] > arr[y+1]){
28 //进行排序
29 int temp = arr[y];
30 arr[y] = arr[y + 1];
31 arr[y + 1] = temp;
32 }
33 }
34 }
35 }
36 //排序完毕后,对数组进行遍历
37 public static void getArray(int[] arr){
38 System.out.print("[");
39 for(int z = 0;z < arr.length; z++){
40 if(z == arr.length - 1){
41 System.out.print(arr[z]+"]");
42 }
43 else{
44 System.out.print(arr[z]+",");
45 }
46 }
47 }
48 }

2、 数组排序之选择排序:
    从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
  分析:
    A:首先是0索引上的数据依次跟后面各个索引上的数据进行比较,
       直到遇到一个比它小的数据,这时候,这个小的数据就替换掉0索引上原来的数据,
       接着这个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较
          例如:{22,11,13,10} 22跟11比后,变成{11,22,13,10},接着11继续跟13、10比较,遇到10后,变成{10,22,13,11}
      也就是说,进行完A后,0索引上的数据肯定是这个数组上最小的数据
    B:接着就是1索引上的数据来跟后面的数据进行比较,这个时候参与比较的数据比原来少了一个
    C:跟B一样,就这样进行下去,知道全部都比较完毕。
    D:总结上面,得出总共需要进行几次A步骤的次数:
        如果是5个数据的数组的话,就一共需要比较arr.length(4)次,若从0开始计数,则是 4-1 = 3次
        而每次比较时,所参与的索引的数据是不一样的:
        第一次时,是0和1以及后面的数据比较;
        第二次时,是1和2以及后面的数据比较
        ...
    E:从D得出
        for(int x = 0; x< arr.length - 1; x++){
          for(int y = x+1; y < arr.length ;y++){
            }
          }
    F:用E的方法得出排序后的数组后,再进行数组遍历输出。
    G:排序和遍历都用方法来表示,以方便以后的使用
          a:返回类型:无,void
          b:参数列表:int[] arr

 1 public class ArrayTest2 {
 2
 3 public static void main(String[] args) {
 4 //首先定义一个数组
 5 int[] arr = {23,12,14,11,30,54};
 6 //调用遍历方法,输出排序前的数组
 7 System.out.println("进行排序前的数组:");
 8 printArray(arr);
 9 //调用排序和遍历方法,输出排序完成后的数组
10 System.out.println("\n排序完成后的数组:");
11 choose(arr);
12 printArray(arr);
13
14 }
15 //定义排序方法
16 public static void choose(int[] arr){
17 //定义进行A步骤的次数
18 for(int x = 0; x < arr.length - 1; x ++ ){
19 //定义每次参与比较的数据个数
20 for(int y = x + 1;y < arr.length ; y++){
21 //进行数据的比较
22 if( arr[x] > arr[y]){
23 //对数据进行排序
24 int temp = arr[y];
25 arr[y] = arr[x];
26 arr[x] = temp;
27 }
28 }
29 }
30 }
31
32
33 //定义遍历方法
34 public static void printArray(int[] arr){
35 System.out.print("[");
36 for(int x= 0; x< arr.length ;x++){
37 if(x == arr.length-1){
38 System.out.print(arr[x]+"]");
39 }
40 else{
41 System.out.print(arr[x]+",");
42 }
43 }
44 }
45
46 }
时间: 2024-12-15 06:51:06

java12-6 冒泡排序法和选择排序法的相关文章

常用排序法之一 ——冒泡排序法和选择排序法

语言中,常用的算法有:冒泡排序.快速排序.插入排序.选择排序.希尔排序.堆排序以及归并排序等等.那么从这篇开始,我将分别总结下这几种排序法. 先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素. ## 冒泡排序法(Bubblesort) ## 所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎么实现数组的有序排列呢. 冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`a

C语言实现冒泡排序法和选择排序法代码参考

为了易用,我编写排序函数,这和直接在主调函数中用是差不多的. 我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误! 冒泡排序法: void sort(int * ar,int k) //ar指向数组名,k是元素个数 { int i,j,temp; for(i = 0; i < k - 1; i++){ //比较k-1趟就可以了 for(j = 0; j < k - i -1; j++){ if(ar[j] > ar[j + 1]){ temp = ar[

冒泡法和选择排序法(比较容易写混)

1 #include<stdio.h> 2 3 4 //冒泡排序法 5 6 void bubbling(int a[],int n); 7 8 //选择排序法 9 void choose(int a[],int n); 10 int main() 11 { 12 int i; 13 int s[6]; 14 printf("please enter five numbers:\n"); 15 for(i=1;i<6;i++) 16 { 17 scanf("%

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式排序法 冒泡法 基本思想: 冒泡排序法 案例: 1234567891011121314151617181920212223242526 //简单的$arr=array(0,5,-1); //现在我们把函数毛片封装成函数,利用以后使用//数组默认传递的是值,不是地址,&是地址符function bubb

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

简单排序的俩种思想——冒泡法和选择排序法

冒泡法: 基本思想:每次将相邻的两个数比较,将小的调到前头(即为升序排列).首先比较第一和第二两个数,小的调到前头,再将比完后的第二个数与第三个数比较,同理小的调到前头.如此比较下去.假设有6个数参与排序,则第一趟两两之间共比较5次,第一趟比完之后最大的数已经到底.然后进行第二趟比较,两两之间共比较4次,将次大数调到倒数第二个数的位置.共需比较5趟,5趟比完之后呈现升序排列. 总结规律:如果有n个数,则要进行n-1趟比较.在第一趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次比较.

JS实现插入排序法和选择排序法

试着写了写,但对输出方式不太熟,所以注释部分的没能成功(我猜测是数据被覆盖了,所以最后运行结果都是'6'),或许不能用innerHTML来进行输出,暂时不管了,改天再研究研究JavaScript的输出方式. 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 7 <body> 8 <!--p id = "x

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

选择排序法、冒泡排序法

选择排序法 int main(int argc, char *argv[]) { int i, j, iMin; int tmp; int nNums[10] = {2,123,541,32,12,74,92,50,8,21}; for(i=0;i<10-1;i++) { iMin = i;    //提取数据的每个位置 for(j=i+1;j<10;j++)  //每次循环,通过iMin获取最小值的下标. { if(nNums[iMin]>nNums[j])   //判断是否最小,比i