day05_数组_冒泡排序_Arrays_20150805

day05_数组_20150805

-------------------------回顾:---------------------------

1.循环:反复执行一段相同或相似的代码

2.循环三要素:

1)循环变量的初始化

2)循环的条件(以循环变量为基础)

3)循环变量的改变(向着循环的结束变)

循环变量: 在循环过程中所改变的那个量

3.循环结构:

1)while:先判断后执行

2)do...while:先执行后判断

第1要素与第3要素相同时

3)for:应用率最高的

4.break:跳出循环

continue:跳过循环体中剩余语句而进入下一次循环

=====================笔记:========================

1.各种循环结构的更佳适用情况

1)while: "当..."循环

2)do...while: "直到..."循环

第1要素与第3要素相同时首选

3)for: 固定次数循环----应用率最高的

2.嵌套循环:

1)循环中套循环

2)多行多列时使用,外层循环控制行,内层循环控制列

3)执行过程: 外层循环走一次,内存循环走所有次

4)能用一层就不用两层,能用两层就不用三层,层数越少越好

如果超过三层循环,说明设计有问题

5)break只能跳出一层循环

3.程序=算法+数据结构

算法:解决问题的流程/步骤(顺序、分支、循环)

数据结构:将数据按照某种特定的结构来保存--数怎么存

设计合理的数据结构会导致好的算法

4.数组:

1)相同数据类型元素的集合

2)数组是一种数据类型(引用类型)

3)数组的定义:

int[] arr = new int[4];

4)数组的初始化: 给数组中的元素赋值

int[] arr = new int[4];             //0,0,0,0

int[] arr = {1,4,5,7};                //1,4,5,7

int[] arr = new int[]{1,4,5,7};  //1,4,5,7

int[] arr;

arr = {1,4,5,7}; //编译错误,此方式只能声明同时初始化

arr = new int[]{1,4,5,7};  //正确

5)数组的访问: 通过下标/索引来访问数组中的元素

下标从0开始,最大到.length-1

int[] arr = new int[4];

System.out.println(arr.length);  //4

arr[0] = 100; //给arr中的第1个元素赋值为100

arr[1] = 200;

arr[2] = 300; //给arr中的第3个元素赋值为300

arr[3] = 400;

arr[4] = 500; //数组下标越界异常

System.out.println(arr[arr.length-1]); //输出最后一个元素

6)数组的遍历:

int[] arr = new int[10];

for(int i=0;i<arr.length;i++){ //遍历arr数组

arr[i] = 100;  //给arr中每个元素都赋值为100

}

for(int i=0;i<arr.length;i++){

System.out.println(arr[i]);

}

for(int i=arr.length-1;i>=0;i--){

System.out.println(arr[i]);

}

7)数组的复制:

System.arraycopy(a,1,a1,0,4);

int[] a1 = Arrays.copyOf(a,6);

a = Arrays.copyOf(a,a.length+1);

8)数组的排序:

Arrays.sort(arr); //升序排

----------------------------------------总结---------------------------------------

1.java中可以动态声明数组----具体用法见代码

Myfoundametal.day05.Test03.java

代码如下:

package day05;

import java.util.Scanner;

//可以动态声明数组
public class Test03 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int[] arr = new int[n];
		for(int i=0;i<arr.length;i++){
			arr[i]=(int)(Math.random()*100);
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println("\n");

		int num = 3;
		int[] arr2=new int[num*3];//正确
		System.out.println("arr2.length="+arr2.length);

	}

}

2.数组复制方式

1)System.arraycopy方法

--public static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length)

----src:源数组

----srcPos:源数组中的起始位置

----dest:目标数组

-----destPos: 目标数组中的起始位置

-----length:要复制的数组元素的数量

代码示例:

package day05;

import java.lang.reflect.Array;
import java.util.Arrays;

public class Test01 {
	public static void main(String[] args){
		int[ ] arr = new int[]{ 4,5,6,8};
		System.out.println(arr);
		//int [ ] arr1 = new int [ 5 ] {10,20,30,40,50 } ;//编译错误
		arr=Arrays.copyOf(arr, 5);
		System.out.println(arr);

		int[] arr2=new int[2];
		System.arraycopy(arr, 0, arr2, 0, 2);
		System.out.println(arr2.toString());

		//System.out.println(Array.getLength(arr2));

	}
}

2)java.util.Arrays.copyOf方法

--类型[ ]  newArray = Arrays.copyOf ( 类型[ ]  original , int  newLength )

----生成的新数组是原始数组的副本;

---newLength小于源数组,则进行截取;(自己通过代码演示效果);

---newLength大于源数组,则用0或 null进行填充;

用法代码示例:

package day05;

import java.util.Arrays;

public class MaxOfArray {

	public static void main(String[] args) {
		int[] arr = new int[10];
		for(int i=0;i<arr.length;i++){
			arr[i]=(int)(Math.random()*100);
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		//找出最大值
		int max=arr[0];
		for(int i=1;i<arr.length;i++){
			if(arr[i]>max){
				max=arr[i];
			}
		}
		System.out.println("Max="+max);

		//1--System.arraycopy();
		int[] arrTemp = new int[arr.length+1];
		System.arraycopy(arr, 0, arrTemp, 0, arr.length);
		arrTemp[arrTemp.length-1] = max;
		arr = arrTemp;

		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();

		//2--Arrays.copyOf();
		arr = Arrays.copyOf(arr, arr.length+1);
		arr[arr.length-1] = max;

		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}
		System.out.println();

		int[] arr1=new int[8];
		System.arraycopy(arr, 0, arr1, 1, 7);
		for(int i=0;i<arr1.length;i++){
			System.out.print(arr1[i]+"\t");
		}
		System.out.println();

		arr = arr1;
		arr1[0] = 999;
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"\t");
		}

	}

}

3.冒泡原理

1)n个数冒n-1轮

2)每一轮都是从第一个元素开始比

3)每一次都是和他的下一个元素比

4)冒出来的数就不参与比较了

示例代码:

package day05;

import java.util.Arrays;

public class SortDemo {

	public static void main(String[] args) {
		int[] arr=new int[5];
		for(int i=0;i<arr.length;i++){
			arr[i]=(int)(Math.random()*100);
		}
		//1--java.util.Arrays.sort();
		//Arrays.sort(arr);

		//2--冒泡
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				if(arr[j]>arr[j+1]){
					int t=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=t;
				}
			}
		}
		//输出
		for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]);
		}

	}

}

4.java.util.Random;

--Random ran = new Random();

--Myfoundametal.day05.RandomDemo.java

代码如下:

package day05;

import java.util.Random;
import java.util.Arrays;

public class RandomDemo {

	public static void main(String[] args) {
		Random ran = new Random();
		int[] arr=new int[10];
		for(int i=0;i<arr.length;i++){
			arr[i]=ran.nextInt(100);
		}
		System.out.println(Arrays.toString(arr));
	}

}

5.java.util.Arrays;

--Arrays.sort(arr);     --排序

--Arrays.toString(arr); --打印数组元素

---可以把数组的元素都打印出来,如[1,2,3];

---------------遗留问题---------------------

1.native关键字?

答:

其实就是JNI。
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。
因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于借口方法。
Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。

(先写这些,后来学到再详细了解)

2.Array类和Arrays类

答:java.lang.reflect.Array

此类提供了动态创建和访问 Java 数组的方法。

java.util.Arrays

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。

二者有些区别,具体看文档吧。

前者倾向于操作数组的单个元素,后者倾向于操作整个数组。

-------------------------------------------------------------------------------

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-17 04:49:51

day05_数组_冒泡排序_Arrays_20150805的相关文章

Net基础篇_学习笔记_第九天_数组_冒泡排序(面试常见题目)

冒泡排序: 将一个数组中的元素按照从大到小或从小到大的顺序进行排列. for循环的嵌套---专项课题 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i=0 j=nums.Length-1-i第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i=1 j=nums.Length-1-i第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i=2 j=nu

数组,冒泡排序,简化

//    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

js 如何动态添加数组_百度知道

1.数组的创建var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外

「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];

数组的冒泡排序

<!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四个人相遇了,他们要排队,身高

我眼中的数组和冒泡排序

一维数组 数组是一个定长的容器,可以放相同类型的数据.数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型 专业解释 数组(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

数组常见的操作_冒泡排序

原理:  相邻的两个元素进行比较,如符合条件换位  比较一轮后确定了最大角标的元素,第二轮最后一个角标就不用再比较了 1 public class Array_BubbleSort { 2 public static void main(String[] args) { 3 int[] arr = {43,4,89,5,2,-1}; 4 5 //Arrays.sort(arr);//java中已经定义好的一种排序方式,开发中,对数组排序,要使用该种方法 6 7 8 PrintArray(arr)

Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度

算法基础  要求:生成一个4*4的2维数组并将其顺时针旋转90度 #!_*_coding:utf-8_*_ array=[[col for col in range(5)] for row in range(5)] #初始化一个4*4数组 #array=[[col for col in 'abcde'] for row in range(5)] for row in array: #旋转前先看看数组长啥样 print(row) print('-------------') for i,row i