java快速排序法(用java快速排序法,求十个数中的最大值)
本文目录
用java快速排序法,求十个数中的最大值
public class QuickSort { private int list = {}; public void setList(int list){ this.list = list; } public int getList(){ return this.list; } public void sort(int left, int right){ if(left 》 right) return; int i = left; int j = right; int tmp = list; int t; while(i != j){ while(list 》= tmp && i 《 j) j--; while(list 《= tmp && i 《 j) i++; if (i 《 j){ t = list; list; list = t; } } list; list = tmp; sort(left, i -1); sort(i+1, right); }}
java算法面试题:排序都有哪几种方法
一、冒泡排序 view plain copypackage sort.bubble;import java.util.Random;/*** 依次比较相邻的两个数,将小数放在前面,大数放在后面* 冒泡排序,具有稳定性* 时间复杂度为O(n^2)* 不及堆排序,快速排序O(nlogn,底数为2)* @author liangge**/public class Main {public static void main(String args) {Random ran = new Random();int;for(int i = 0 ; i 《 10 ; i++){sort = ran.nextInt(50);}System.out.print("排序前的数组为");for(int i : sort){System.out.print(i+" ");}buddleSort(sort);System.out.println();System.out.print("排序后的数组为");for(int i : sort){System.out.print(i+" ");}}/*** 冒泡排序* @param sort*/private static void buddleSort(int sort){for(int i=1;i《sort.length;i++){for(int j=0;j《sort.length-i;j++){if(sort){int temp = sort;sort;sort = temp;}}}}} 二、选择排序 view plain copypackage sort.select;import java.util.Random;/*** 选择排序* 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,* 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。* 选择排序是不稳定的排序方法。* @author liangge**/public class Main {public static void main(String args) {Random ran = new Random();int;for (int i = 0; i 《 10; i++) {sort = ran.nextInt(50);}System.out.print("排序前的数组为");for (int i : sort) {System.out.print(i + " ");}selectSort(sort);System.out.println();System.out.print("排序后的数组为");for (int i : sort) {System.out.print(i + " ");}}/*** 选择排序* @param sort*/private static void selectSort(int sort){for(int i =0;i《sort.length-1;i++){for(int j = i+1;j《sort.length;j++){if(sort){int temp = sort;sort;sort = temp;}}}}} 三、快速排序 view plain copypackage sort.quick;/*** 快速排序 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,* 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行,以此达到整个数据变成有序序列。* @author liangge**/public class Main {public static void main(String args) {int sort = { 54, 31, 89, 33, 66, 12, 68, 20 };System.out.print("排序前的数组为:");for (int data : sort) {System.out.print(data + " ");}System.out.println();quickSort(sort, 0, sort.length - 1);System.out.print("排序后的数组为:");for (int data : sort) {System.out.print(data + " ");}}/*** 快速排序* @param sort 要排序的数组* @param start 排序的开始座标* @param end 排序的结束座标*/public static void quickSort(int sort, int start, int end) {// 设置关键数据key为要排序数组的第一个元素,// 即第一趟排序后,key右边的数全部比key大,key左边的数全部比key小int key = sort;// 设置数组左边的索引,往右移动判断比key大的数int i = start;// 设置数组右边的索引,往左移动判断比key小的数int j = end;// 如果左边索引比右边索引小,则还有数据没有排序while (i 《 j) {while (sort 》 key && j 》 start) {j--;}while (sort 《 key && i 《 end) {i++;}if (i 《 j) {int temp = sort;sort;sort = temp;}}// 如果左边索引比右边索引要大,说明第一次排序完成,将sort与key对换,// 即保持了key左边的数比key小,key右边的数比key大if (i 》 j) {int temp = sort;sort;sort = temp;}//递归调用if (j 》 start && j 《 end) {quickSort(sort, start, j - 1);quickSort(sort, j + 1, end);}}} view plain copy/*** 快速排序** @param a* @param low* @param high* voidTest*/public static void kuaisuSort(int a, int low, int high){if (low 》= high){return;}if ((high - low) == 1){if (a){swap(a, low, high);return;}}int key = a;int left = low + 1;int right = high;while (left 《 right){while (left 《 right && left 《= high)// 左边向右{if (a 》= key){break;}left++;}while (right 》= left && right 》 low){if (a 《= key){break;}right--;}if (left 《 right){swap(a, left, right);}}swap(a, low, right);kuaisuSort(a, low, right);kuaisuSort(a, right + 1, high);} 四、插入排序 view plain copypackage sort.insert;/*** 直接插入排序* 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据* 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。*/import java.util.Random;public class DirectMain {public static void main(String args) {Random ran = new Random();int;for (int i = 0; i 《 10; i++) {sort = ran.nextInt(50);}System.out.print("排序前的数组为");for (int i : sort) {System.out.print(i + " ");}directInsertSort(sort);System.out.println();System.out.print("排序后的数组为");for (int i : sort) {System.out.print(i + " ");}}/*** 直接插入排序** @param sort*/private static void directInsertSort(int sort) {for (int i = 1; i 《 sort.length; i++) {int index = i - 1;int temp = sort;while (index 》= 0 && sort 》 temp) {sort;index--;}sort = temp;}}} 顺便添加一份,差不多的 view plain copypublic static void charuSort(int a){int len = a.length;for (int i = 1; i 《 len; i++){int j;int temp = a;for (j = i; j 》 0; j--)//遍历i之前的数字{//如果之前的数字大于后面的数字,则把大的值赋到后面if (a 》 temp){a;} else{break;}}a = temp;}} 把上面整合起来的一份写法: view plain copy/*** 插入排序:**/public class InsertSort {public void sort(int data) {for (int i = 1; i 《 data.length; i++) {for (int j = i; (j 》 0) && (data); j--) {swap(data, j, j - 1);}}}private void swap(int data, int i, int j) {int temp = data;data;data = temp;}} 五、顺便贴个二分搜索法 view plain copypackage search.binary;public class Main {public static void main(String args) {int sort = {1,2,3,4,5,6,7,8,9,10};int mask = binarySearch(sort,6);System.out.println(mask);}/*** 二分搜索法,返回座标,不存在返回-1* @param sort* @return*/private static int binarySearch(int sort,int data){if(data《sort){return -1;}int begin = 0;int end = sort.length;int mid = (begin+end)/2;while(begin 《= end){mid = (begin+end)/2;if(data 》 sort){begin = mid + 1;}else if(data 《 sort){end = mid - 1;}else{return mid;}}return -1;}}
如何解决java中混合快速排序法栈溢出(stack overflow)
1. 应该是您的递归算法调用的层级太多导致的。优化下算法,让调用层级减低才行。2. 这种情况自己维护个栈序列,用循环的方式来处理应该就可以了。例如可以是:1. (start,end)入栈2. 栈是否为空,若为空则退出3. 弹出栈定元素,如果start-end《breakpoint使用插入排序,完成后回到2。 否则对序列进行划分,将小于和大于choosePivot(a,start,end);的区间入栈 (minstart,minend), (maxstart, maxend)4. 重复2,3,直到栈为空
更多文章:
2022cctv5直播nba(2022年cctv5直播nba赛程表)
2024年6月9日 05:18
悟空问答平台和百度有什么区别?你觉得头条问答与百度知道哪个最精准
2024年5月3日 07:01
diskgenius下载(diskgenius使用分区时让下载什么东西)
2024年10月8日 13:35
索爱x10i刷机教程(新买的X10i怎么刷成2.3.3或2.3.4买来是2.1..求教程)
2024年7月24日 12:13
义乌购网站是个什么样的网站?义乌购小商品的官方网站是什么里面的东西便宜吗
2024年6月8日 12:44
navigator appname(navigator.appName == ’Netscape’ 什么意思)
2024年7月3日 16:32