数组的常见的排序及查找操作

-

数组中的各种查找排序方法总是搞混淆,所以在此对java中数组常用的排序查找操作的代码和一些原理做了一下简单的总结:

class Arr {
	public static void main(String args[]) 
	{
		int arr[] = { 5, 3, 8, 2, 0, 9, 1, 7 };//35208179,
		Select(arr);
		printArr(arr);
		bubble(arr);
		printArr(arr);
		QuickSort(arr, 0, (arr.length-1));
		printArr(arr);
		System.out.println(halfSearch(arr,7));
	}
	
	public static int  halfSearch(int arr[],int key)
	{
		/*
		 * 折半查找的前提是有序*/
		int min = 0,max = arr.length-1,mid;
		
		while(min <= max)
		{
			mid = (min + max) >> 1;
			if(key > arr[mid])
			{
				min = mid + 1;
			}
			else if(key < arr[mid])
			{
				max = mid - 1;
			}
			else
				
			return mid;
		}
		return -1;
	}
	
	public static void QuickSort(int arr[],int left,int right)
	{
		/*
		 * 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
		 * 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
		 * 这样以此类推*/
		if (left < right)
		{
			int tmp = partition(arr, left, right);
			QuickSort(arr, left, tmp);
			QuickSort(arr, tmp + 1, right);
		}
		
	}

	public static int partition(int arr[], int left, int right) {
		int i = 0, j = 0;
		int key = 0, tmp = 0;

		if (arr == null) {	return 0;	}

		i = left;
		j = right;
		key = arr[left];

		while (i < j) {
			while (arr[j] > key) 
			{
				--j;
			}
			swap(arr,i,j);

			while (arr[i] < key) {
				i++;
			}
			swap(arr,i,j);

		}
		return i;

	}
	
	public static void bubble(int arr[])
	{
		/*
		 * 冒泡排序是相邻的两个元素进行比较,如果符合条件换位*/
		for(int i = 0; i < arr.length-1; i++)
		{
			for(int j = 0; j < arr.length-i-1; j++)
			{
				if(arr[j]>arr[j+1])
				{
					swap(arr,j,j+1);
				}
			}
		}
		printArr(arr);
	}

	public static void Select(int arr[])
      {
    	  /*
    	   *选择排序的比较方法 是用第一个依次和其他元素比较并交换位置,第一轮比较结束后;
    	   *拿第二个元素再一次和除了第一个元素外的其他元素比较并交换位置*/
		for (int i = 0; i < arr.length- 1; i++) 
		{
			for (int j = i+1; j < arr.length; j++) 
			{
				if (arr[i]> arr[j]) 
				{
				    swap(arr,i,j);
				}
			}
		}

		printArr(arr);
      }
	public static void swap(int arr[],int i,int j)
	{
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
	}

	public static void printArr(int arr[]) {
		for (int i : arr) 
		{
			System.out.print(i + " ");
		}
		System.out.println();
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值