[javaSE] 数组(排序-冒泡排序)

两层嵌套循环,外层控制循环次数,内层循环进行比较

for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length;y++){
                if(arr[y]>arr[y+1]){

                }
            }
        }

此时的代码有问题,内层循环多比较了已经排好序的部分,都在最后面,需要去掉

        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x;y++){
                if(arr[y]>arr[y+1]){

                }
            }
        }

此时的代码有问题,内层循环最后一个元素,无法和它后面的比较,应该去掉

        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++){
                if(arr[y]>arr[y+1]){

                }
            }
        }

判断完后,两个变量交换位置,利用第三方变量

        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++){
                if(arr[y]>arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                }
            }
        }

java版:

public class ArrayDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] arr=new int[]{2,5,4,1};
        int[] newArr=bubbleSort(arr);
        for(int x:newArr){
            System.out.print(x);
        }
    }

    /**
     * 冒泡排序(正序)
     * @param arr
     * @return
     */
    public static int[] bubbleSort(int[] arr){
        for(int x=0;x<arr.length-1;x++){
            for(int y=0;y<arr.length-x-1;y++){
                if(arr[y]>arr[y+1]){
                    int temp=arr[y];
                    arr[y]=arr[y+1];
                    arr[y+1]=temp;
                }
            }
        }
        return arr;
    }
}

PHP版:

<?php
class ArrayDemo{
    public static function main(){
        $arr=array(2,5,4,1);
        print_r(ArrayDemo::bubbleSort($arr));//输出 Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 )
    }

    /**
     * 冒泡排序(正序)
     * @param arr
     * @return
     */
    public static function bubbleSort($arr){
        for($x=0;$x<count($arr)-1;$x++){
            for($y=0;$y<count($arr)-$x-1;$y++){
                if($arr[$y]>$arr[$y+1]){
                    $temp=$arr[$y];
                    $arr[$y]=$arr[$y+1];
                    $arr[$y+1]=$temp;
                }
            }
        }
        return $arr;
    }

}

ArrayDemo::main();

选择排序和冒泡排序性能都很低,提高性能的方法,当需要换位置的时候,先不换,先把需要换位置的角标放到栈内存中,等最后一次性在堆内存中交换

排序中最快的是 希尔排序

时间: 2024-10-14 04:29:46

[javaSE] 数组(排序-冒泡排序)的相关文章

算法大神之路----排序(冒泡排序法)

冒泡排序法 冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大. 冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止. 冒泡排序法分析 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n). 由于冒泡排序为相邻两

011--c数组--排序--组成最大数

数组--排序--组成最大数 组成最大数 任意输入一个自然数,输出该自然数的各位数字组成的最大数.例如,输入 1593 ,则输出为 9531 . 输入: 自然数 n 输出: 各位数字组成的最大数   测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1 以文本方式显示 1593↵ 以文本方式显示 9531↵ 1秒 64M 0 [分析] 很显然,这是个排序的题.先用冒泡排序实现,很简单代码就不写了. [代码] 冒泡排序的代码在我的Blog:http://blog.csdn.net/deb

我眼中的数组和冒泡排序

一维数组 数组是一个定长的容器,可以放相同类型的数据.数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型 专业解释 数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据.线性表,顾名思义,线性表就是数据排成像一条线一样的结构.每个线性表上的数据最多只有前和后两个方向.数组具有连续的内存空间和相同的数据类型 数组的声明 dataType[] arrayName;注:数组在声明时不能指定数组长度,即dataType[n] arrayName:是不合

12.数组三--数组的冒泡排序与快速排序

一.冒泡排序 package com.atguigu.java; /* * 数组的冒泡排序的实现 * */ public class BubbleSortTest { public static void main(String[] args) { int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99}; //冒泡排序 for(int i = 0;i < arr.length - 1;i++){ for(int j = 0;j < arr.l

数组,冒泡排序,简化

//    int array[] = {3, 2, 6, 9, 8, 5, 7, 1, 4}; //    int count = sizeof(array) / sizeof(array[0]); //    int flag = 1; //    for (int i = 0; i < count - 1 && flag == 1; i++) { //        flag = 0; //        for (int j = 0; j < count - i - 1

《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保每一轮把最小的元素交换到前面去.这个过程好比水中的气泡向上飘,所以叫冒泡排序.代码非常简单,所以语言描述反而显得麻烦了. 实现: 1 // My implementation for bubble sort. 2 #include <iostream> 3 #include <vector&

Perl 哈希、数组 排序

写在前面: 1. 注意use warnings; 后,定义变量前加my 2. 此文转载其他文章,代码修改,适合新版本perl (一) sort函数sort LISTsort BLOCK LISTsort SUBNAME LISTsort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNAME或BLOCK,sort按标准字串比较顺序来进行(例如ASCII顺序).如果指定了SUBNAME,它实际上是个子函数的名字,该子函数对比2个列表元素,并返回一个小于,等于,或大于

「C语言」「算法」数组的冒泡排序

1 #include<stdio.h> 2 #define N 10 3 4 //数组的冒泡排序 5 6 void sort(int b[]){ 7 int i,j; 8 for(i=0;i<N;i++){ 9 for(j=i+1;j<N;j++){ 10 if(b[i]>b[j]){ 11 b[i]^=b[j]; 12 b[j]^=b[i]; 13 b[i]^=b[j]; 14 } 15 } 16 } 17 } 18 19 int main() { 20 int a[N];

js 数组 排序

//1.先定义数组 var cr_json = new Array(); var s_arr_cr = '{ id: ' + hid_JobTicketID + ',fee:' + hid_CrossRegionFee + '}'; var arr_cr = eval('(' + s_arr_cr + ')'); cr_json.push(arr_cr); //排序 cr_json.sort(function (a, b) { return b.fee - a.fee; }); js 数组 排序

数组的冒泡排序

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //数组的冒泡排序 arr = [1, 4, 7, 2]; //a = 1, b = 4, c = 7, d = 2 //1. 2. 3. 4 //abcd四个人相遇了,他们要排队,身高