Java分治法快速排序实现寻找数组中第二大的元素

题目如下:

给出一个分治算法来找出n个元素序列中第二大的元素。

我选择的分治算法是快速排序算法。

数组通过随机数来产生。

代码实现如下:

package 实验测试;

import java.util.Scanner;

public class SIX {
	public static void main(String args[]) {
		int n;
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		int arr[] = new int [n];
		int low = 0;
		int high = arr.length-1;
		for(int i = 0; i < n; i++) {
			arr[i] = (int)(Math.random()*10000);
		}
		KP a = new KP();
		a.quicksort(arr, low, high);
		System.out.print("排序好的序列为:");
		for(int w = 0; w < arr.length; w++) {
		System.out.print(arr[w]+"  ");
		}
		System.out.println();
		for(int q = arr.length - 1; q >= 0; q--) {
			if(arr[q] != arr[q-1]) {
				System.out.print("第二大的元素为:"+arr[q-1]);
			}
			break;
		}
	}
}

class KP{
	void quicksort(int arr[], int low, int high) {
		if( low > high) {
			return;
		}
		//2, 存
		int i = low;
		int j = high;
		//3,key
		int key = arr[low];
		//4,完成一趟排序
		while( i< j) {
			//4.1 ,从右往左找到第一个小于key的数
			while(i<j && arr[j] > key){
				j--;
			}
			// 4.2 从左往右找到第一个大于key的数
			while( i<j && arr[i] <= key) {
				i++;
			}
			//4.3 交换
			if(i<j) {
				int p = arr[i];
				arr[i] = arr[j];
				arr[j] = p;
			}
		}
		// 4.4,调整key的位置
		int p = arr[i];
		arr[i] = arr[low];
		arr[low] = p;
		//5, 对key左边的数快排
		quicksort(arr, low, i-1 );
		//6, 对key右边的数快排
		quicksort(arr, i+1, high);
	}
}

运行截图如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值