1.java 数组冒泡排序

排序的基本原理(升序):

  •   原始数据:  2 、1 、9 、0 、5 、3 、7 、6 、8;
  • 第一次排序: 1  、2 、0 、5 、3 、7 、6 、8 、9 ;
  • 第二次排序: 1  、0 、2 、3 、5 、6 、7 、8 、9 ;
  • 第三次排序 : 1 、 2 、3 、4 、5 、6 、7 、8 、9 ;

 以上是基础的原理过程,但是有一个问题,数据的不同可能排序的次数出现不同,但是有多少个数据,总的排序次数不会超过数组的长度只要排序的次数达到长度*长度的次数,那么所有的数据就可以排序成功。

进行冒泡排序:

public class 数组的排序 {
public static void main(String[] args) {
int data[] = new int[]{2,1,9,0,5,3,7,6,8};
get(data);
//外层控制排序的总次数
for (int y = 0 ; y < data.length ; y++){
//内层控制每次的排序控制
for (int x = 0 ; x <data.length-1 ; x++) {
if (data[x] > data[x+1]){
int t = data[x];
data[x] = data[x+1];
data[x+1] = t;
}
}
} get(data);
}
//输出数据的方法
public static void get(int temp[] ){
for (int i = 0 ; i < temp.length ; i++) {
System.out.print(temp[i]+ "、");
}
System.out.println();
}
}

  改善设计:主方法设计上是作为程序的起点,既然是起点,所有的代码编写一定尽量简单,那么我们可以单独定义方法进行复杂操作。

 public class 数组的排序 {
public static void main(String[] args) {
int data[] = new int[]{2,1,9,0,5,3,7,6,8};
get(data);
sort(data);
get(data);
}
//输出数据的方法
public static void get(int temp[] ){
for (int i = 0 ; i < temp.length ; i++) {
System.out.print(temp[i]+ "、");
}
System.out.println();
}
//负责排序的方法
public static void sort(int s[]){
//外层控制排序的总次数
for (int y = 0 ; y < s.length ; y++){
//内层控制每次的排序控制
for (int x = 0 ; x <s.length-1 ; x++) {
if (s[x] > s[x+1]){
int t = s[x];
s[x] = s[x+1];
s[x+1] = t;
}
}
}
}
}

2.数组转置

  •   原始数据   :  1 、 2 、3 、4 、5 、6 、7 、8  ;
  • 转置后数据 : 8 、 7 、6 、5 、4 、3 、2 、1   ;

要实现转置的操作有两个思路:

    定义一个新的数组,而后将原始数组按照排序的方式插入到新的数组之中,随后改变原始数组的引用;

 public class 数组的排序 {
public static void main(String[] args) {
int data[] = new int[]{1,2,3,4,5,6,7,8};
//首先定义一个新的数组,长度与原始数组一致
int temp[] = new int[data.length];
int foot = data.length -1 ;
//对于新的数组按照索引由小到大的顺序循环
for (int i = 0 ; i < temp.length ; i++) {
temp[i] = data[foot];
foot--;
}
data = temp; //data转向temp ,而data的原始数据就成为了垃圾
get(data); }
//输出数据的方法
public static void get(int temp[] ){
for (int i = 0 ; i < temp.length ; i++) {
System.out.print(temp[i]+ "、");
}
System.out.println();
}
}

    虽然上面的算法实现了转置的操作,但是代码里会产生垃圾 data的原始数据就是垃圾。

  •   利用算法,再一个数组上直接完成转置操作

    •   原始数据:  1 、 2 、3 、4 、5 、6 、7 、8  ;     //转换次数:数组长度 ÷ 2  记住不管数组是技术还是偶数转置次数一样
    • 第一次转置: 8 、 2 、3 、4 、5 、6 、7 、1  ;
    • 第二次转置 : 8 、 7 、3 、4 、5 、6 、2 、1  ;
    • 第三次转置: 8 、 7 、6 、4 、5 、3 、2 、1   ;
    • 第四次转置 : 8 、 7 、6 、5 、4 、3 、2 、1    ;

转置:

 public class 数组的转置 {
public static void main(String[] args) {
int data[] = new int[]{1,2,3,4,5,6,7,8,9};
reverse(data);
get(data);
}
//负责转置操作
public static void reverse(int arr[]){
int start = 0;
int end = arr.length -1;
for (int i = 0; i < arr.length/2 ; i++) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start ++;
end --;
}
}
//此方法负责输出
public static void get(int temp[]){
for(int i = 0 ; i < temp.length ; i++) {
System.out.print(temp [i]+"、");
}
System.out.println();
}
}

java 数组冒泡排序、转置(降序)的更多相关文章

  1. js学习篇--数组按升序降序排列

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【Java】数组升序和降序

    int[] x={1,6,4,8,6,9,12,32,76,34,23}; 升序: Arrays.sort(x); 降序: resort(x); public int[] resort(int[] n ...

  3. 【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境jdk:1.7+ 前言之前我写过关于comparator的理解,但是都 ...

  4. Java中sort实现降序排序

    利用Collections的reverseOrder方法: import java.util.Arrays; import java.util.Collections; public class Ma ...

  5. java数组冒泡排序

    public class PaiXu1 { public static void main(String[] args) { int[] s = {345,879,456,870,221,902,14 ...

  6. Java里的数组降序

    Java升序容易,降序不易. 基本类型不能降序,至少要是包装类. 升序使用Arrays.sort() 降序要么使用Collections.reverse,要么实现Comparator接口 import ...

  7. Java的数组和list升序,降序,逆序函数Collections.sort和Arrays.sort的使用

    list升序,降序,逆序List<Integer>list =new ArrayList<Integer>();//如果list是 5 7 2 6 8 1 41.升序:Coll ...

  8. Comparator的compare方法如何定义升序降序

    最近做算法题用了Comparator接口下的compare方法,思考了一下升序和降序的规则是如何来的,现在做一个补充,方便以后回顾.  升序代码 public static void main(Str ...

  9. java数组降序排序之冒泡排序

    import java.util.Arrays;//必须加载 class Demo{ public static void main(String []args){ int[] arr={3,54,4 ...

随机推荐

  1. BZOJ做题记录[0512~?]

    觉得做一道开一篇真不好...好多想找的东西都被刷下去了... 至于?的日期究竟到什么时候...还是看心情...但是估计不会超过七天吧 最后更新时间:05/19 10:42 [05/14 10:56]我 ...

  2. python学习笔记(十五)之集合

    集合:对应数学中的集合类型.集合中的元素是唯一,且无序的. 创建集合 方法一:使用{},注意python会自动删除重复元素 >>> number = {1,2,3,4,3,2,1} ...

  3. 垂直水平居中--css3

    在移动前端制作中,很多新的css3特性能够帮助我们更好的制作.例如这个垂直水平居中问题,就有一个简单的代码可以解决: 利用CSS3的transform:translate .center{ width ...

  4. 基于canvas实现的fontawesome动态图标

    由于还没有全部实现,实现了一些demo,demo地址在 https://github.com/jiangzhenfei/canvas-fontawesome 实现了动态loading 实现动态电池充电 ...

  5. attachEvent 中this指向

    IE中使用的事件绑定函数与Web标准的不同,而且this指向也不一样,Web标签中的this指向与传统事件绑定中的this一样,是当前目标,但是IE中事件绑定函数中this指向,通过使用call或ap ...

  6. 37 - 网络编程-UDP编程

    目录 1 UDP协议 2 UDP通信流程 3 UDP编程 3.1 构建服务端 3.3 常用方法 4 聊天室 5 UDP协议应用 1 UDP协议 UDP是面向无连接的协议,使用UDP协议时,不需要建立连 ...

  7. MySQL5.6.26升级到MySQL5.7.9实战方案【转】

    MySQL5.6.26升级到MySQL5.7.9实战方案 转自 MySQL5.6.26升级到MySQL5.7.9实战方案 - 其他网络技术 - 红黑联盟http://www.2cto.com/net/ ...

  8. Spring源码解读Spring IOC原理

    一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们自己设计这样一个视角来考虑: 所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反 ...

  9. BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...

  10. python脚本-实现自动按规则创建指定大小和指定个数的文件案例

    # -*- coding: cp936 -*-#---------------------------------------------------------------------------- ...