黑马程序员技术交流社区
标题:
数组操作分享
[打印本页]
作者:
王章亚
时间:
2012-7-3 13:42
标题:
数组操作分享
1. 数组的操作
package ch01;
public class MyArray {
private static int[] arr;
private static int elements;// 数组内的有效数据。
public MyArray() {
arr = new int[10];
}
/**
* 显示数组中的元素
*
*/
public static void displayNum(){
System.out.print("{");
for(int i=0;i<elements;i++){
System.out.print(arr[i]+" ");
}
System.out.println("}");
}
/**
* 增加数据
*
* @param avlue插入的值
*/
public static void insertNum(int value) {
arr[elements]=value;
elements++;
}
/**
* 有序的插入数据
* @param value 要插入的数值
*/
public static void orderInsertNum(int 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++;
}
/**
* 删除数组里面的元素
*
* @param index 需要删除的数据的下标
*/
public static void deleteNum(int index) {
for(int i=index;i<elements;i++){
arr[i]=arr[i+1];
elements--;
}
}
/**
* 修改数组中的元素
*
*@param index 需要更新的数值的下标
*@param newValue 要更新的新数值。
*/
public static void updateNum(int index, int newValue) {
arr[index]=newValue;
}
/**
* 查找数组中的值
* @param value 需要查找的数值
*/
public static int searchNum(int value){
int i;
for( i=0;i<elements;i++){
if(arr[i]==value){
break;
}
}
return i;
}
/**
* 二分法查找数组中的元素
* @param value 要查找的数值
*/
public static int searchNumOfHalf(int value){
int left=0;
int right=elements;
int mid=(left+right)/2;
while(arr[mid]!=value){
if(arr[mid]>value){
right=mid-1;
}
else{
left=mid+1;
}
mid=(left+right)/2;
}
return mid ;
}
}
2. 简单排序
(1.)冒泡排序
/**
* 实现数值冒泡排序
* @param num 要排序的数组
*/
public static void maoPaoPaiXu(int[] num){
for(int i=0;i<num.length-1;i++){
for(int j=0;j<num.length-1;j++){
if(num[j]>num[j+1]){
int temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
}
这样可以实现排序但是存在着缺点,效率会低,因为每次都需要执行num.lenthg-1次比较。应该用下面的代码
/**
* 实现数值冒泡排序
* @param num 要排序的数组
*/
public static void maoPaoPaiXu(int[] num){
for(int i=0;i<num.length-1;i++){
for(int j=0;j<num.length-i-1;j++){ //这样就会减少判断的次数
if(num[j]>num[j+1]){
int temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
}
(2)选择排序
/**
* 选择排序
* @param num 需要排序的数组
*/
public static void selectionSort(int[]num){
int k=0;//总是指向最小值 j 不停的在移动 i 排完序的位置
for(int i=0;i<num.length-1;i++){
k=i;
for(int j=i;j<num.length;j++){
if(num[j]<num[k]){
k=j;
}
}
int temp=num[i];
num[i]=num[k];
num[k]=temp;
}
for(int i=0;i<num.length;i++){
System.out.print(num[i]+" ");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2