java_排序_插入法_封装
JAVA实现各种排序算法
{ System.out.print(data[k]+" ");
} }
四 、插入类排序-----希尔排序 希尔排序,也叫缩小增量排序 将待续按照某一种规则分为几个子序列,不断缩小规则,最后用一个直接插入排序合成 空间复杂度为 O(1),时间复杂度为 O(nlog2n) 算法先将要排序的一组数按某个增量 d(n/2,n 为要排序数的个数)分成若干组,每组中记
low = mid + 1; } //找到了要插入的位置,从该位置一直到插入数据的位置之间数据向后移动 for(int j = i; j >= low + 1; j--) data[j] = data[j - 1]; //low 已经代表了要插入的位置了 data[low] = temp; } for(int k=0;k<data.length;k++)
}
五 交换类排序-----冒泡排序 交换类排序核心就是每次比较都要进行交换 冒泡排序:是一种交换排序 每次比较若大小不同则就会发生交换,每一趟排序都能将一个元素放到它最终的位置!每
一趟就进行比较。 时间复杂度 O(n2),空间复杂度 O(1)
public static void bubbleSort(int[] a){ //从头开始两两比较,若前边值大则交换 否则,继续比较; // 只需记录需要交换的值 int tmp;
20 */
21 public static void max_heapify(int[] a, int i) {
22 int left = leftChild(i);
23 int right = rightChild(i);
24 int largest = 0;
用Java实现常见的8种内部排序算法
⽤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各种数组排序(插入,交换,选择,归类,基数排序)
import java.util.Random;/***** 排序算法的分类如下:* 1.插入排序(直接插入排序、折半插入排序、希尔排序);* 2.交换排序(冒泡泡排序、快速排序);* 3.选择排序(直接选择排序、堆排序);* 4.归并排序;* 5.基数排序。
** 关于排序方法的选择:* (1)若n较小(如n≤50),可采用直接插入或直接选择排序。
* 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
* (2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;* (3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
***/public class SortTest {/*** 初始化测试数组的方法* @return 一个初始化好的数组*/public int[] createArray() {Random random = new Random();int[] array = new int[10];for (int i = 0; i < 10; i++) {array[i] = random.nextInt(100) - random.nextInt(100);//生成两个随机数相减,保证生成的数中有负数}System.out.println("-----------原始序列-----------------");printArray(array);return array;}/*** 打印数组中的元素到控制台**/public void printArray(int[] source) {for (int i : source) {System.out.print(i + " ");}System.out.println();}/*** 交换数组中指定的两元素的位置****/private void swap(int[] source, int x, int y) {int temp = source[x];source[x] = source[y];source[y] = temp;}/*** 冒泡排序----交换排序的一种* 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。
java的排序方法
java的排序方法
Java提供了多种排序方法,可以根据不同的需求选择不同的方法。
常用的排序方法包括:
1. 冒泡排序:比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置,重复此过程直到整个序列有序。
2. 选择排序:每次选择最小的元素,放到已排好序的序列的末尾,重复此过程直到整个序列有序。
3. 插入排序:将未排序的元素插入到已排好序的序列中的合适位置,重复此过程直到整个序列有序。
4. 快速排序:选择一个元素作为基准,将小于基准的元素放到基准的左边,大于基准的元素放到基准的右边,重复此过程直到整个序列有序。
5. 归并排序:将序列分成两个子序列,对子序列进行排序,然后将排序后的子序列合并成一个有序序列,重复此过程直到整个序列有序。
除了以上常用的排序方法,Java还提供了Arrays.sort()方法,可以对数组进行排序,该方法采用快速排序算法实现。
此外,Java
还提供了Collections.sort()方法,可以对集合进行排序,该方法采用归并排序算法实现。
- 1 -。
java中的几种排序方法
}
}
}
}
选择排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
public class SelectionSort implements SortUtil.Sort {
if (data[j] < data[lowIndex]) {
lowIndex = j;
}
}
SortUtil.swap(data,i,lowIndex);
return l; Fra bibliotek } }
改进后的快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
public class ImprovedQuickSort implements SortUtil.Sort {
}
private void insertSort(int[] data) {
int temp;
for(int i=1;i<data.length;i++){
for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){
public void sort(int[] data) {
int temp;
for (int i = 0; i < data.length; i++) {
int lowIndex = i;
JAVA四种基本排序的总结
JAVA 四种基本排序,包括冒泡法,插入法,选择法,SHELL 排序法.其中选择法是冒泡法的改进,SHELL 排序法是 插入法的改进.所以从根本上来说可以归纳为两种不同的排序方法:即:插入法&冒泡法一 插入法:遍历排序集合,每到一个元素时,都要将这个元素与所有它之前的元素遍历比较一遍,让符合排序顺序的元素挨个移动到当前范围内它最应该出现的位置。
交换是相邻遍历移动,双重循环控制实现.这种排序法属于地头蛇类型,在我的地牌上我要把所有的东西按一定的顺序规整,过来一个,规整一个. 处理代码如下:1 2 3 4 5 6 7 8 9 10 public void sort(int [] data) {int temp;for (int i=1; i 〈data.length; i++){for (int j=i; (j 〉0)&&(data[j]〉data[j-1]); j--){temp=date[j];data[j]=data[j-1];data[j-1]=temp; }}}二冒泡法:比较容易,它的内层循环保证遍历一次后,集合中最小(大)元素出现在它的正确位置,下一次就是次小元素。
该方法在集合分布的各种情况下交换移动的次数基本不变,属于最慢的一种排序。
实现也是双重循环控制。
这种排序法属于过江龙,就是要找到极端,但是过奖龙也有大哥,二哥等,所以他们只能是大哥挑了二哥挑.处理代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 public static int [] maopao(int [] data) {int temp;for (int i=0; i 〈data.length-1; i++){for (int j=i+1; j 〈data.length; j++){if (data[i]〈data[j]){temp=data[i];data[i]=data[j];data[j]=temp;}}}return data;三选择法:该方法只是通过遍历集合记录最小(大)元素的位置,一次遍历完后,再进行交换位置操作,类似冒泡,但在比较过程中,不进行交换操作,只记录元素位置。
java封装概念
java封装概念
在 Java 编程中,封装(Encapsulation)是一个重要的面向对象编程概念。
它将类的内部细节(属性和方法)隐藏起来,对外只暴露必要的接口,从而提高代码的可维护性和安全性。
封装的主要目的是保护类的内部实现细节,防止它们被外部代码直接访问或修改。
通过封装,可以将类的属性设置为私有的(private),只有类内部的方法可以访问它们。
这样可以避免外部代码误操作或恶意修改类的内部状态,提高代码的稳定性和安全性。
封装还提供了更好的代码组织和可读性。
当类的内部细节被隐藏起来时,开发者只需关注类的公共接口,而不必关心其内部实现细节。
这有助于代码的模块化和复用,因为不同的类可以通过公共接口进行交互,而不必了解彼此的内部工作原理。
另外,封装还促进了代码的可维护性。
当类的内部实现细节发生变化时,只要保证公共接口不变,外部代码就不会受到影响。
这使得代码的修改和扩展更加容易,减少了维护成本和出错的可能性。
总之,封装是 Java 编程中的一个重要概念,它通过隐藏类的内部细节、提供公共接口以及保护类的内部状态,提高了代码的可维护性、安全性和可读性。
在编写 Java 代码时,合理利用封装可以使代码更加健壮、易于扩展和维护。
Java-十种内部排序实现(选择,冒泡,插入,希尔,堆,归并,快速,基数,计数,桶)及代码下载
1.选择排序2.冒泡排序3.插入排序4.希尔排序5.堆排序6.归并排序7.快速排序8.基数排序9.计数排序10.桶排序1. 选择排序这个排序方法最简单,废话不多说,直接上代码:publicclass SelectSort {/*** 选择排序* 思路:每次循环得到最小值的下标,然后交换数据。
* 如果交换的位置不等于原来的位置,则不交换。
*/publicstaticvoid main(String[] args) { selectSort(Datas.data);Datas.prints("选择排序");}publicstaticvoid selectSort(int[] data){int index=0;for (int i = 0; i <data.length; i++) {index = i;for (int j = i; j <data.length; j++) {if (data[index]>data[j]) {index = j;}}if (index != i) {swap(data,index,i);}}}publicstaticvoid swap(int[] data,int i,int j){ int temp = data[i];data[i] = data[j];data[j] = temp;}}选择排序两层循环,第一个层循环遍历数组,第二层循环找到剩余元素中最小值的索引,内层循环结束,交换数据。
内层循环每结束一次,排好一位数据。
两层循环结束,数据排好有序。
2 冒泡排序冒泡排序也简单,上代码先:publicclass BubbleSort {/*** 冒泡排序* 思路:内部循环每走一趟排好一位,依次向后排序*/publicstaticvoid main(String[] args) {bubbleSort(Datas.data);}privatestaticvoid bubbleSort(int[] data) { int temp;for (int i = 0; i <data.length; i++) {for (int j = i+1; j <data.length; j++) {if (data[i]>data[j]) {temp =data[i];data[i]=data[j];data[j] = temp;}}}Datas.prints("冒泡排序");}}冒泡排序和选择排序有点像,两层循环,内层循环每结束一次,排好一位数据。
java编写的插入排序算法
import java.util.Arrays;
public class insert {
public static void main(String[] args) {
int[] A={1,3,2,7,6,4,8,5,11,10};
System.out.println("初始:"+Arrays.toString(A));
ij j=5
1 2 3 4 >6 >7 8 5 11 10 元素 6、7 各后移一个单位,空出位置赋值为 4
ij j=6
1 2 3 4 6 7 8 5 11 10 无移动元素
ij j=7
1 2 3 4 5 >6 >7 >8 11 10 元素 6、7、8 各后移一个单位,空出位置赋值为 5
ij j=8
for(int j=1;j<A.length;j++){ int k=A[j]; int i; for(i=j-1;i>=0 && A[i] > k;i--) { A[i+1]=A[i]; } A[i+1]=k;
System.out.println("j=" + j +":"+Arrays.toString(A)); }
伪代码:
InsertSort(A)
ห้องสมุดไป่ตู้
1 for j←2 to n do
2
key ← A[j]
3
i← j-1
4
while i > 0 and A[i] > key do
5
A[i + 1]← A[i]
Java实现插入排序
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 轮排序,这⾥⾯n-1轮排序就已⾜够(3)k 表⽰第 k+1 个位置,arrary[k] 表⽰第 k+1 个位置的数(4)每⼀轮的 k 从 j-1 开始,向前依次⽐较,每⽐较⼀次做⼀次k- -,直到遇到⽐该数⼩的数,则插⼊到这个较⼩数的后⾯(5)上述想法可转换为:每⼀轮的 arrary[k+1] 与其前⾯⽐⾃⼰⼤的数交换位置,遇到⽐⾃⼰⼩的数则停⽌(6)较⼤数与较⼩数交换位置的经典算法:若a>b; 则c=a; a=b; b=c;(7)从⼤到⼩排序只需把 arrary[k]>arrary[k+1] 换成 arrary[k]<arrary[k+1] 即可(8)选择进⾏何种排序,在 if 语句的判断框⾥加上此时m应该等于的值(9)因为要先选择进⾏何种排序,才能进⾏排序,所以把 m==1 放在 arrary[k]>arrary[k+1] 前⾯,且⽤短板与 && ,这样更易于理解(如果m≠1,则直接进⾏else if 的语句)(10)也可以 m==1 & arrary[k]>arrary[k+1] 或 arrary[k]>arrary[k+1] & m==1,但不能 arrary[k]<arrary[k+1] && m==2。
插入算法---java实现
int[] arrTest = main.insertSort(arr); main.print(arrTest);
}
public int[] insertSort(int[] arr) {
if (arr.length == 1 && arr.length == 2) { return null;
String[] arrString = temp.split(" "); int[] arr = new int[arrString.length + 1];
//把String数组转成int数组 for (int i = 0; i < arrString.length; i++) {
arr[i + 1] = Integer.parseInt(arrString[i]); }
} }
} return arr;
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
}
public void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
/** * @Author: Lance * @Date: 2018/8/7 10:44 */ public class Main {
public static void main(String[] args) throws Exception {
java插入法排序原理
java插入法排序原理java插入法排序原理Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
以下是店铺为大家搜索整理的java插入法排序原理,希望能给大家带来帮助!入排序的基本思想是,经过i-1遍处理后,L[1i-1]己排好序。
第i 遍处理仅将L[i]插入L[1i-1]的适当位置,使得L[1i]又是排好序的序列。
要达到这个目的,我们可以用顺序比较的'方法。
首先比较L[i]和L[i-1],如果L[i-1]≤ L[i]?騆[1i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j] ≤L[j+1]时为止。
简言之,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到"查找"内容中进行。
排序的过程图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。
代码:nta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18 ,23,34,15,35,25,53,51};int temp=0;for(int i=1;iint j=i-1;temp=a[i];for(;j>=0&&tempa[j+1]=a[j]; //将大于temp的值整体后移一个单位}a[j+1]=temp;}for(int i=0;i System.out.println(a[i]); }【java插入法排序原理】。
Java数据结构之排序③插入排序
Java数据结构之排序③插⼊排序插⼊排序思想:1.将序列分为⼀个有序序列和⼀个⽆序序列,起始时认为arr[0]是⼀个有序序列,后⾯的数据是⼀个⽆序序列2.依次将⽆序序列的头部数据取出,将之与有序序列的尾部进⾏⽐较,从后向前遍历有序序列3.⽐较过程中⽐较过后却并不是正确位置时要将⽐较过后的数进⾏后移⼀位,为找到正确位置插⼊数据时空出位置4.将⽆序序列遍历完成后将会得到⼀个有序序列5.找到正确位置的条件是:插⼊值⼤于前⾯的数⼩于后⾯的数代码实现:1public static void insertSort(int[] arr) {2//使⽤逐步推导的⽅式3//第⼀轮:101, 34, 119, 1 --> 34, 101, 119, 14//第⼆轮:34, 101, 119, 1 --> 34, 101, 119, 15//第三轮:34, 101, 119, 1 --> 1, 34, 101, 1196int insertValue = 0;7int insertIndex = 0;8//定义待插⼊的数9for (int i = 1; i < arr.length; i++) {10 insertValue = arr[i];11 insertIndex = i - 1;//即arr[1] 前⾯这个数的下标1213//给insertValue找到插⼊的位置14//说明:15//1.insertIndex >= 0保证找的插⼊位置不越界16//2.insertValue < arr[insertIndex] 待插⼊的数还没有找到插⼊位置17//3.就需要将arr[insertIndex]后移18while (insertIndex >= 0 && insertValue < arr[insertIndex]) {19 arr[insertIndex + 1] = arr[insertIndex];20//将⽐较过的数据后移⼀位即找到正确插⼊位置时给插⼊数据空出位置21 insertIndex--;//没有找到正确的插⼊位置从后向前遍历有序序列22 }23//当退出while循环的时候说明插⼊的位置找到,insertIndex+124//代码优化:当数没有发⽣变化时,就不发⽣交换赋值25if (insertIndex + 1 != i) {26 arr[insertIndex + 1] = insertValue;27 }28 System.out.println("第" + i + "轮插⼊:");29 System.out.println(Arrays.toString(arr));30 }31 }。
排序算法--插入排序(java)
排序算法--插⼊排序(java)插⼊排序的算法思想:1. 整个数组看成两个数组,⼀个有序数组(只是包含第⼀个元素)和⼀个⽆序数组(从arr[1]~arr[n])2. ⼀轮扫描:扫描⽆序数组,把⽆序数组中的第⼀个元素插⼊到有序数组中的适当位置,3. 扫描n-1轮,每次扫描⼀轮⽆序数组中的元素个数减少⼀个代码实现:class Demo {public static void main(String[] args){int[] nums = {1,9,5,2};insertSort(nums);System.out.println(Arrays.toString(nums));}public static void insertSort(int[] arr){//轮次for(int i = 1;i < arr.length ;i++){ // 扫描⽆序数组,从1开始int insertVal = arr[i];int insertIndex = i - 1; // 插⼊的位置在insertIndex+1while(insertIndex >=0 && arr[insertIndex] > insertVal)arr[insertIndex+1] = arr[insertIndex]; //元素后移,腾出空间insertIndex--; //insertIndex--必须在arr[insertIndex+1] = arr[insertIndex]的后⾯}if (insertIndex != i - 1){ // 这⾥包含了两种情况:1. 在有序数组从右向左扫描找到第⼀个⽐该插⼊元素⼩的元素,所以insertIndex+1//就是可以插⼊的位置 2. 有序数组中从右向左扫描完整个数组没有⽐该插⼊元素⼩的元素,所以insertIndex =-1,这样该元素插⼊insertIndex+1 =0 也就是第⼀个元素 arr[insertIndex+1] = insertVal; // 这⾥可以优化,判断如果插⼊的位置就在原地,则不⽤赋值}}}}。
插入排序Java代码实现
插⼊排序Java代码实现插⼊排序复习:先说结论:1,插⼊排序时间复杂度为O(n^2),额外空间复杂度为O(1);算法实现中可以做到稳定性;核⼼思想:插⼊排序实现思想为,将待排序的数组视作⼀堆⽆序的牌,如果要将这堆⽆序的牌整理为有序,可以顺序依次抽出牌堆⾥的牌放⼊⼿中,每次从牌中抽出⼀张牌的时候,会将抽出的牌和⼿中的牌依次⽐较,直到抽出的牌⽐⼿中⽐较的牌更⼤,则直接插⼊;下⾯为插⼊排序Java代码实现:1package com.cmbc.test1;23import java.util.Arrays;45/**6 * 插⼊排序7 * @author itqcy8 *9*/10public class InsertionSort {11public static void insertionSort(int[] arr){12for(int i = 1;i<arr.length;i++){13for(int j = i;j>0&&arr[j]<arr[j-1];j--){14 swap(arr,j,j-1);15 }16 }17 }1819public static void swap(int[] arr, int i, int j) {20 arr[i] = arr[i] ^ arr[j];21 arr[j] = arr[i] ^ arr[j];22 arr[i] = arr[i] ^ arr[j];23 }2425public static void printArray(int[] arr) {26if (arr == null) {27return;28 }29for (int i = 0; i < arr.length; i++) {30 System.out.print(arr[i] + " ");31 }32 System.out.println();33 }3435public static int[] copyArray(int[] arr) {36if (arr == null) {37return null;38 }39int[] res = new int[arr.length];40for (int i = 0; i < arr.length; i++) {41 res[i] = arr[i];42 }43return res;44 }4546public static boolean isEqual(int[] arr1,int[] arr2){47if((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){48return false;49 }50if(arr1==null&&arr2==null){51return true;52 }53if(arr1.length!=arr2.length){54return false;55 }56for(int i = 0;i<arr1.length;i++){57if(arr1[i]!=arr2[i]){58return false;59 }60 }61return true;62 }6364public static int[] generateRandomArray(int maxSize,int maxValue){65int[] arr = new int[(int)((maxSize+1)*Math.random())];66for(int i = 0;i<arr.length;i++){67 arr[i] = (int)((maxValue+1)*Math.random())-(int)((maxValue+1)*Math.random());68 }69return arr;70 }7172public static void main(String[] args) {73int testTime = 500000;74int maxSize = 100;75int maxValue = 100;76boolean succeed = true;77for(int i = 0;i<testTime;i++){78int[] arr1 = generateRandomArray(maxSize, maxValue);79int[] arr2 = copyArray(arr1);80 insertionSort(arr1);81 Arrays.sort(arr2);82if(!isEqual(arr1,arr2)){83 succeed = false;84 }85 }86 System.out.println(succeed?"排序结果与对数器结果相同":"排序结果不同"); 87int[] arr = generateRandomArray(maxSize, maxValue);88 printArray(arr);89 insertionSort(arr);90 printArray(arr);91 }929394 }。
JAVA 综合面试题
Java面试题整理Java面向对象1. super()与this()的区别?This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束而this他代表当前对象,当然所有的资源都可以访问. 在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造. 而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.2. 作用域public,protected,private,以及不写时的区别?Public:不同包、同一包、类内都可用Private:类内Protected: 不同包的子类、同一包、类内都可用不写时:同一包内、类内3. 编程输出如下图形。
* * * * * * * * * * * * * * * 代码如下:public class Print { public static void main(String[] args) { for (int i = 0; i < 5; i++) { for (int j = 5; j > i; j--) { System.out.print("*"); } System.out.println(); } } } 4. JAVA的事件委托机制和垃圾回收机制java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。
在这种方案中,监听器简单的等待,直到它收到一个事件。
一旦事件被接受,监听器将处理这个事件,然后返回。
垃圾回收机制垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。
如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收5. 在JAVA中,如何跳出当前的多重嵌套循环?用break; return 方法。
Java插入排序
Java插入排序1. 插入排序插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。
插入排序是一种最简单直观的排序算法,它的工作原理是通过创建有序序列和无序序列,然后再遍历无序序列得到里面每一个数字,把每一个数字插入到有序序列中正确的位置。
插入排序在插入的时候,有优化算法,在遍历有序序列找正确位置时,可以采取二分查找1.1 算法步骤将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
N的范围:0~最大索引package com.itheima.mysort;public class A03_InsertDemo {public static void main(String[] args){/*插入排序:将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
N的范围:0~最大索引*/int[] arr ={3,44,38,5,47,15,36,26,27,2,46,4,19,50, 48};//1.找到无序的哪一组数组是从哪个索引开始的。
2int startIndex =-1;for(int i =0; i < arr.length; i++){if(arr[i]> arr[i +1]){startIndex = i +1;break;}}//2.遍历从startIndex开始到最后一个元素,依次得到无序的哪一组数据中的每一个元素for(int i = startIndex; i < arr.length; i++){//问题:如何把遍历到的数据,插入到前面有序的这一组当中//记录当前要插入数据的索引int j = i;while(j >0&& arr[j]< arr[j -1]){//交换位置int temp = arr[j];arr[j]= arr[j -1];arr[j -1]= temp;j--;}}printArr(arr);}private static void printArr(int[] arr){//3.遍历数组for(int i =0; i < arr.length; i++){System.out.print(arr[i]+" ");}System.out.println();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**
* 插入排序
* java练习
* 从小打到排序
* 插入排序类单独封装
*/
package com.test1;
//import java.util.*;
public class Demo5_4 {
public static void main(String[] args)
{
int arr[]={1,6,3,10,8,7,9,0,0,-199,9};
Insert insert =new Insert();//调用Insert类创建一个Insert对象
insert.sort(arr);//Insert对象传递数组参数,调用sort方法实现插入排序 }
}
class Insert //封装插入排序类
{
public void sort(int arr[])
{
for (int i=1;i<arr.length;i++)
{
int insertVal=arr[i]; //临时变量
//insertVal准备和前一个数比较
int index=i-1; //指向前一个数
while(index>=0&&insertVal<arr[index])//判断条件
{
//将要把arr[index]向后移动
arr[index+1]=arr[index];
//让index向前移动
index--;
}
//将indexVal插入到适当位置
//如indexVal较大,则没有变换位置;如果不是最大则换到了合适位置。
arr[index+1]=insertVal;
}
System.out.println("结果是:");//打印结构for (int p=0;p<=arr.length-1;p++)
{
System.out.print(arr[p]+" "); }
}
}。