1、选择和冒泡排序
public class SelectAndBubble {
public static void main(String[] args) {
int array1[] = {7,5,0,9,2,8,4,3,1};
int array2[] = {3,8,0,9,7,4,5,1,6};
System.out.println("\n改进后的选择排序:");
print(array1);
changeSelectSort(array1);
System.out.println();
print(array1);
System.out.println("\n冒泡排序:");
print(array2);
bubbleSort(array2);
System.out.println();
print(array2);
}
private static void bubbleSort(int array[]){
int temp = 0;
for(int i=0;i<array.length;i++){
for(int j=array.length-1;j>i;j--){
if(array[j] < array[j-1]){
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
}
}
}
private static void selectSort(int array[]){
int temp = 0;
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[i]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
private static void changeSelectSort(int array[]){
int temp = 0,index = 0;
for(int i=0;i<array.length;i++){
index = i;
for(int j=index+1;j<array.length;j++){
if(array[j] < array[index]){
index = j;
}
}
if(i != index){
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}
}
private static void print(int array[]) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
2、对对象排序
public class Test {
public static void main(String[] args) {
Date days[] = new Date[5];
days[0] = new Date(2006,3,15);
days[1] = new Date(2005,9,30);
days[2] = new Date(2010,5,27);
days[3] = new Date(2008,9,1);
days[4] = new Date(2011,2,14);
print(days);
selectSort(days);
System.out.println("排序后:");
print(days);
}
private static void selectSort(Date days[]){
Date temp;
for(int i=0;i<days.length;i++){
for(int j=i+1;j<days.length;j++){
if(days[j].compare(days[i]) < 0){
temp = days[i];
days[i] = days[j];
days[j] = temp;
}
}
}
}
private static void print(Date days[]) {
for (int i = 0; i < days.length; i++) {
System.out.println(days[i]);
}
}
}
class Date{
int year,month,day;
Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
public int compare(Date a){
return this.year > a.year ? 1 : this.year < a.year ? -1 : this.month > a.month ? 1 : this.month < a.month ? -1 : this.day > a.day ? 1 : this.day < a.day ? -1 : 0;
}
public String toString(){
return "year:month:day--" + year + "." + month + "." + day;
}
}
3、约瑟夫环问题
public class Test {
public static void main(String[] args) {
boolean array[] = new boolean[500];
int leftNum = array.length;
int counter = 0;
int index = 0;
for(int i=0;i<array.length;i++){
array[i] = true;
}
while(leftNum > 1){
if(array[index] == true){
counter++;
}
if(counter == 3){
array[index] = false;
counter = 0;
leftNum--;
}
index++;
if(index == array.length){
index = 0;
}
}
for(int j=0;j<array.length;j++){
if(array[j] == true){
System.out.println(j);
}
}
}
}
4、二分法查找某个值
public class Test3 {
public static void main(String[] args) {
int array[] = {1,23,34,56,58,59,70,89,100};
int index = binSearch(array,23);
if(index == -1){
System.out.println("没有找到该值。");
}else{
System.out.println("该值在数组的第" + (index+1) + "的位置。");
}
}
private static int binSearch(int array[],int k){
int low = 0;
int high = array.length - 1;
int mid;
while(low <= high){
mid = (low + high)/2;
if(array[mid] < k){
low = mid + 1;
}else if(array[mid] > k){
high = mid - 1;
}else{
return mid;
}
}
return -1;
}
}
5、数组的拷贝1
public class Test {
public static void main(String[] args) {
String s1[] = {"asd","fghjk","zxcv","qwertyu"};
String s2[] = new String[5];
System.arraycopy(s1, 0, s2, 0, s1.length);
for(int i=0;i<s2.length;i++){
System.out.println(s2[i]);
}
}
}
6、数组的拷贝2
public class Test {
public static void main(String[] args) {
int array[][] = {{1,2},{3,4,5},{6,7}};
int arrayBak[][] = new int[3][];
System.arraycopy(array, 0, arrayBak, 0, array.length);
print(arrayBak);
System.out.println();
arrayBak[2][1] = 100;
print(arrayBak);
}
private static void print(int array[][]){
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}