目录
自定义数组
package com.zxl.ch00;
public class MyArray {
private long[] arr;//数组
private int elements;//指针
public MyArray() {
this.arr = new long[50];
}
public MyArray(int maxsize) {
this.arr = new long[maxsize];
}
//添加数据
public void insert(long value){
arr[elements]=value;
elements++;
}
//展示数据
public void display(){
System.out.print("[");
for (int i = 0; i < elements; i++) {
if(i == elements-1){
System.out.print(arr[i]);
}else{
System.out.print(arr[i]+",");
}
}
System.out.println("]");
}
//查找数据
public int search(long value){
int i;
for ( i = 0; i <elements ; i++) {
if (value == arr[i]){
break;
}
}
if(i==elements){
return -1;
}else{
return i;
}
}
//根据索引来查找数据
public long get(int index){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
//删除数据
public void delete(int index){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
for (int i = index; i <elements ; i++) {
arr[i] =arr[i+1];
}
elements--;
}
}
//更新数据
public void change(int index , int newvalue){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index]=newvalue;
}
}
}
自定义有序数组以及二分法查找数据
package com.zxl.ch00;
/**
* 有序数组
*/
public class MyOrderArray {
private long[] arr;//数组
private int elements;//指针
public MyOrderArray() {
this.arr = new long[50];
}
public MyOrderArray(int maxsize) {
this.arr = new long[maxsize];
}
//添加数据
public void insert(long value){
int i;
for ( i = 0; i <elements ; i++) {
if(arr[i]>value){
break;
}
}
for (int j = elements; j > i; j--) {
arr[j] = arr[j-1];
}
arr[i]=value;
elements++;
}
//展示数据
public void display(){
System.out.print("[");
for (int i = 0; i < elements; i++) {
if(i == elements-1){
System.out.print(arr[i]);
}else{
System.out.print(arr[i]+",");
}
}
System.out.println("]");
}
//查找数据
public int search(long value){
int i;
for ( i = 0; i <elements ; i++) {
if (value == arr[i]){
break;
}
}
if(i==elements){
return -1;
}else{
return i;
}
}
//根据索引来查找数据
public long get(int index){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
return arr[index];
}
}
/**
* 二分法查找数据
*/
public int binarySearch(long value) {
int middle = 0;
int low = 0;
int pow = elements;
while(true) {
middle = (pow + low) / 2;
if(arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if(arr[middle] > value) {
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}
//删除数据
public void delete(int index){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
for (int i = index; i <elements ; i++) {
arr[i] =arr[i+1];
}
elements--;
}
}
//更新数据
public void change(int index , int newvalue){
if(index >= elements || index < 0){
throw new ArrayIndexOutOfBoundsException();
}else{
arr[index]=newvalue;
}
}
}
数组排序
冒泡排序
嵌套循环,外围循环控制次数length-1,内层循环从数组最后一个开始跟前面一个比较,把最 小的一直交换到数组第一位,然后外层循环控制第二趟、第三趟...
package com.zxl.ch01;
public class BubbleSort {
public static void sort(long[] arr){
long temp;
for (int i = 0; i <arr.length-1 ; i++) {
for (int j = arr.length-1; j >i ; j--) {
if(arr[j]<arr[j-1]){
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
}
选择排序
package com.zxl.ch01;
public class SelectionSort {
public static void sort(long[] arr){
int k;
long temp=0;
for (int i = 0; i <arr.length-1 ; i++) {
k=i;
for (int j = i; j < arr.length; j++) {//取出最小值的位置并且赋值给k
if(arr[j]<arr[k]){
k=j;
}
}
//交换最小值到最前面
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
}
插入排序
package com.zxl.ch01;
public class InsertSort {
public static void sort(long[] arr){
long temp=0;
//从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
for (int i = 1; i <arr.length; i++) {
temp = arr[i];// 记录要插入的数据
int j = i;// 从已经排序的序列最右边的开始比较,找到比其小的数
// 在已经有序的队列中找到最小的值
while (j>0 && arr[j-1]>temp){
arr[j] = arr[j-1];
j--;
}
// 确定位置
// 存在比其小的数,插入
if(j!=i){
arr[j] = temp;
}
}
}
}