冒泡排序
public static void main(String[] args) {
int[] arr = {9,7,8,2,1,6,0};
for(int i=0;i
快速排序
public static void main(String[] args) {
int[] arr={5,9,7,4,5,7,6,1,9,9,7,4};
System.out.println(Arrays.toString(arr));
sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] a,int x,int y){
int i=x;
int j=y;
if (i>j) {//放在k之前,防止下标越界
return;
}
int k=a[i];
while (ik) {//找出小的数
j--;
}
while (i
二分查找
public static void main(String[] args) {
int[] arr = {1,3,5,7,9,11};
int key = 5;
int position = s(arr,key,0,arr.length - 1);
if(position == -1){
System.out.println("查找的是"+key+",序列中没有该数!");
}else{
System.out.println("查找的是"+key+",找到位置为:"+position);
}
}
public static int s(int[] a,int key,int x,int y){
if(key < a[x] || key > a[y] || x > y){
return -1;
}
int m = (x + y) / 2;//初始中间位置
if(a[m] > key){
//比关键字大则关键字在左区域
return s(a, key, x, m -1);
}else if(a[m] < key){
//比关键字小则关键字在右区域
return s(a, key, m + 1, y);
}else {
return m;
}
}
归并排序
public static void main(String[] args) {
int[] a = {5,9,7,4,5,7,6,1,9,9,7,4};
sort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
public static void sort(int[] arr, int L, int R) {
if(L == R) {
return;
}
int mid = L + ((R - L) /2);
sort(arr, L, mid);
sort(arr, mid + 1, R);
merge(arr, L, mid, R);
}
public static void merge(int[] arr, int L, int mid, int R) {
int[] temp = new int[R - L + 1];
int i = 0;
int p1 = L;
int p2 = mid + 1;
// 比较左右两部分的元素,哪个小,把那个元素填入temp中
while(p1 <= mid && p2 <= R) {
temp[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
// 上面的循环退出后,把剩余的元素依次填入到temp中
// 以下两个while只有一个会执行
while(p1 <= mid) {
temp[i++] = arr[p1++];
}
while(p2 <= R) {
temp[i++] = arr[p2++];
}
// 把最终的排序的结果复制给原数组
for(i = 0; i < temp.length; i++) {
arr[L + i] = temp[i];
}
}