/**
* 冒泡
* @author yangm
*
*/
// 冒泡排序:
class BubbleSort {
public static void sort(int arr[]) {
int len = arr.length - 1, count = 0;
for (int i = 0; i < len; i++) { // 由数组长度控制总次数
for (int j = 0; j < len -i; j++) {
count++;
if (arr[j] > arr[j + 1]) { // 不能用j++,会改变J的值。
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
} // end out-for
System.out.println("count:" + count);
ClassicSortDriver.showArr(arr);
}// end method
}// end class
/**
* 选择排序自己理解:
* -从乱序数组里面选择一个数与未排序数组里面每个元素比较大小,记住最小元素的下标
* 内层循环结束,交换未排序数组第一个元素与最小元素。
* 外层循环从第二个元素继续,得到第二个最小元素放在排序数组的后面,即与未排序数组第一个元素交换
* @author yangm
*
*/
class SelectSort{
public static void sort(int arr[]) {
System.out.println("选择排序:");
int len = arr.length-1, count = 0;
for(int i = 0; i<len; i++) {
int min_index = i;
for(int j = len; j>i; j--) {
count ++;
if(arr[j]<arr[min_index]) {
min_index = j;
}
}
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
System.out.println("count:" + count);
}//end method
}//end class
个人感觉以上者两个排序方法是逻辑上最容易的理解的两个排序了。没毛病~
【后面理解逻辑了再写。这个东西和钱一样应该是多多益善!吧!】
/**
* 插入排序: 第一个与第二相比,小的放前面。
* 第二个与第三相比,小的放前面。新的第二个与第一个相比,小的放前面。
* 第三个与第四个相比,小的放前面。新的第三个与第二个相比,小的放前面。如果位置正确。后面不用执行。否则同上 。。。。。
*/
class insertSort {
public static void sort(int arr[]) {
System.out.println("插入排序:");
int count = 0;
for(int i = 1; i < arr.length; i++) {//由数组长度控制外循环次数
for(int j = i; j > 0;j--) {
count++;
if(arr[j]<arr[j-1]) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}else break;
}//end inner for
}
System.out.println("count:" + count);
ClassicSortDriver.showArr(arr);
}//end method
}
二分查找。
/**
* 二分法查找,理解了还是很好写的。
* @author yangm
*
*/
public static int binarySearch(int arr[], int key){
int top = 0, bottom = arr.length - 1;
while (top<=bottom){
int mid = (top + bottom) / 2; //折半
if(arr[mid] < key) {
top = mid + 1;
}else if(arr[mid] > key){
bottom = mid - 1;
}else return mid;
}
return -1;//不存在返回-1
}
递归方法:
/**
* 二分法查找,递归方法:
* @author yangm
*/
public static int binarySearch(int arr[], int top, int bottom, int key){
while (top<=bottom){
int mid = (top + bottom) / 2; //折半
if(arr[mid] < key) {
return binarySeach(arr,mid+1,bottom,key);
}else if(arr[mid] > key){
return binarySeach(arr,top,mid-1,key);
}else return mid;
}
return -1;//不存在返回-1
}