Java数组快速排序,冒泡排序,选择排序,插入排序代码实现

Java数组快速排序,插入排序,冒泡排序,选择排序代码实现

快速排序:递归拆分
插入排序:从左往右一个一个插入左边已排好的数组中
冒泡排序:选定一个节点循环相邻的比较,每次循环排出一个最大的值
冒泡排序优化:看完血赚https://www.cnblogs.com/kilig/p/10423845.html
选择排序:只要发现小的就交换到前面

二分查找:前后端点和中间点循环比较

package test;

import java.util.Arrays;

public class ArraySort {
	public static void main(String args[]) {

		int[] a = { 2, 4, 64, 3, 63, 6 };
		// quickSort(a, 0, a.length - 1);
		// insertSort(a);
		// bubleSort(a);
		selsctSort(a);
		for (int i : a) {
			System.out.print(i + ",");
		}
		binarySearch(a, 6);
		System.out.println();
		System.out.print("二分查找:" + binarySearch(a, 63));
	}

	// 快速排序
	//https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653195042&idx=1&sn=2b0915cd2298be9f2163cc90a3d464da&chksm=8c99f9f8bbee70eef627d0f5e5b80a604221abb3a1b5617b397fa178582dcb063c9fb6f904b3&scene=21#wechat_redirect
	public static int[] quickSort(int[] A, int begin, int end) {
	 int i = begin;
        int j = end;
        if (i >= j) {
            return A;
        }
        int temp = A[i];
        while (i < j) {
            while (i < j && A[j] >= temp) {
                j--;
            }
            while (i < j && A[i] <= temp) {
                i++;
            }
            if (i < j) {
                int k = A[i];
                A[i] = A[j];
                A[j] = k;
            }
        }
        A[begin] = A[i];
        A[i] = temp;
        // 递归调用左半数组
        quickSort(A, begin, i - 1);
        // 递归调用右半数组
        quickSort(A, i + 1, end);

        return A;
	}

	// 插入排序
	public static int[] insertSort(int[] A) {
		for (int i = 1; i < A.length; i++) {
			int temp = A[i];
			int j;
			for (j = i - 1; j >= 0; j--) {
				if (temp < A[j]) {
					A[j + 1] = A[j];

				} else {
					break;
				}
			}
			A[j + 1] = temp;
		}

		return A;
	}

	// 冒泡排序
	public static int[] bubleSort(int[] nums) {
		// 1.从前往后
		for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
			for (int j = 0; j < nums.length - i - 1; j++) {// 内层循环控制每一趟排序多少次
				if (nums[j] > nums[j + 1]) {
					int temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
			}
		}

		// 2.从后往前
		/*for (int i = nums.length - 1; i > 0; i--) {
			for (int j = 0; j < i; j++) {
				if (nums[j + 1] < nums[j]) {
					int temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
			}
		
		}
		*/
		return nums;
	}

	// 选择排序
	public static int[] selsctSort(int[] nums) {
		// 普通选择排序
		/*	for (int i = 0; i < nums.length; i++) {
				for (int j = i + 1; j < nums.length; j++) {
					if (nums[i] > nums[j]) {
						int temp = nums[i];
						nums[i] = nums[j];
						nums[j] = temp;
					}
				}
			}*/
		// 提高效率排序
		int k = 0;
		for (int i = 0; i < nums.length - 1; i++) {
			k = i;
			for (int j = i + 1; j < nums.length; j++) {
				if (nums[j] < nums[k]) {
					k = j;
				}
			}
			if (k != i) {
				nums[k] = nums[k] ^ nums[i];
				nums[i] = nums[k] ^ nums[i];
				nums[k] = nums[k] ^ nums[i];
			}
		}

		return nums;
	}

	// 二分查找
	public static int binarySearch(int[] nums, int num) {
		int begin = 0;
		int end = nums.length - 1;
		int mid;
		while (begin < end) {
			mid = begin + (end - begin)  /  2;
			//(begin +end)  /  2有溢出风险
			if (nums[mid] == num) {
				return mid;
			} else if (nums[mid] < num) {
				begin = mid;
			} else if (nums[mid] > num) {
				end = mid;
			} else {
				return 0;
			}
		}
		return 0;
	}
// 递归二分查找
	public static int binarySearch(int[] nums, int bg, int end, int num) {
		 if(bg<=end){
			int mid = begin + (begin - end)  /  2;
			if (nums[mid] == num) {
				return mid;
			} else if (nums[mid] < num) {
				//bg = mid + 1;
				return binarySearch(nums, mid+1, end, num);
			} else {
				//end = mid - 1;
				return binarySearch(nums, bg, mid-1, num);
			}

		 }
		return -1;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值