在学习C语言时,对排序算法和二分查找有一定的理解并进行了实现。
不过打算用Java重新实现一下冒泡排序(Bubble Sort),选择排序(Selection Sort),快速排序(Quick Sort)和二分查找(binary_search)。
package pra_07;
public class J_14 {
public static void main(String[] args) {
int[] arr={24,75,65,98,20};
bubble_sort(arr); //冒泡排序
int[] arr2={24,75,65,98,20};
selection_sort(arr2); //选择排序
int[] arr3={24,75,65,98,20};
quickSort(arr3); //快速排序
for (int i = 0; i < arr3.length; i++) {
System.out.println(arr3[i]);
}
int index2=binary_search(arr2,-2);
System.out.println(index2+1);
}
//冒泡排序
public static void bubble_sort(int[] arr){
int k=0;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
k=arr[j];
arr[j]=arr[j+1];
arr[j+1]=k;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//选择排序
public static void selection_sort(int[] arr){
int k=0;
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
k=arr[i];
arr[i]=arr[j];
arr[j]=k;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//快速排序
public static void sort(int a[], int start, int end) {
int i, j, index;
if (start > end) {
return;
}
i = start;
j = end;
index = a[i];
while (i < j) {
while (i < j && a[j] >= index)
j--;
if (i < j)
a[i++] = a[j];
while (i < j && a[i] < index)
i++;
if (i < j)
a[j--] = a[i];
}
a[i] = index;
sort(a, start, i - 1);
sort(a, i + 1, end);
}
public static void quickSort(int a[]) {
sort(a, 0, a.length-1);
}
//二分查找
public static int binary_search(int a[],int value){
int min=0,max=a.length-1,mid=(min+max)/2;
while(a[mid]!=value){
if(a[mid]<value){
min=mid+1;
}else if(a[mid]>value){
max=mid-1;
}
mid=(min+max)/2;
if(min>max){
return -2;
}
}
return mid;
}
}