package tiantian; public class QuickSort { public static void quickSort(int[] arr,int low,int high){ int i,j,temp,t; if(low>high){ return; } i=low; j=high; //temp就是基准位 temp = arr[low]; while (i<j) { //先看右边,依次往左递减 while (temp<=arr[j]&&i<j) { j--; } //再看左边,依次往右递增 while (temp>=arr[i]&&i<j) { i++; } //如果满足条件则交换 if (i<j) { t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } //最后将基准为与i和j相等位置的数字交换 arr[low] = arr[i]; arr[i] = temp; //递归调用左半数组 quickSort(arr, low, j-1); //递归调用右半数组 quickSort(arr, j+1, high); } public static void main(String[] args){ int[] arr = {10,7,4,7,3,2,1,8,9,19}; quickSort(arr, 0, arr.length-1); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }代码解释
时间: 2024-02-14 14:23:00 浏览: 58
这是一个 Java 实现的快速排序算法。快速排序是一种高效的排序算法,它的基本思想是通过分治法将一个大问题不断划分成小问题,然后递归地解决小问题,最终得到整个问题的解。
具体地,这个算法使用了一个基准值(即 temp)来将待排序数组分成两个部分,其中一部分所有元素都小于等于基准值,另一部分所有元素都大于等于基准值。然后对这两部分分别递归地进行快速排序,直到整个数组有序为止。
在代码实现中,使用了两个指针 i 和 j 来分别从左向右和从右向左遍历数组,找到需要交换的元素。具体来说,当右指针 j 指向的元素比基准值小,或者左指针 i 指向的元素比基准值大时,就停止移动指针。然后交换 i 和 j 指向的元素,将小于基准值的元素放到左边,大于基准值的元素放到右边。最后将基准值和 i 指向的元素交换位置,完成一轮划分。
这个算法的时间复杂度为 O(n log n),其中 n 是待排序数组的长度。
相关问题
package tiantian; import java.util.*; public class Max{ public static void main(String[] args) { System.out.println("请输入:"); Scanner sc=new Scanner(System.in); while(sc.hasNext()) { String a=sc.nextLine(); //System.out.println(a); String b=maxString(a); System.out.println(b); /*char[]c=a.toCharArray(); char max=c[0];int index=0; for(int i=0;i<c.length;i++) { if(c[i]>max) max=c[i]; index=i; } System.out.println(max); System.out.println(index); */ } sc.close(); } private static String maxString(String a) { char[] c=a.toCharArray(); char max=c[0]; int index=0; List<Object> list=new ArrayList(); for(int i=0;i<c.length;i++) { list.add(c[i]); } for(int i=0;i<c.length;i++) { if(max<=c[i]) { max=c[i]; index=i; } } int k=0; for(int i=0;i<c.length;i++) { //int k=0; if(c[index]==c[i]) { insertStr(list,i,k); k++; } } String ss=""; for(Object object:list) { ss+=object; } return ss; } private static void insertStr(List<Object> list, int i, int k) { list.add(i+1+k,"(max)"); } } 代码解释
这段代码是一个 Java 程序,名为 Max,它的作用是在用户输入的字符串中找到最大的字符,并在字符串中标记出该字符。程序首先会提示用户输入,然后通过 Scanner 类获取用户输入的字符串。接下来,程序通过 maxString 方法找到最大的字符,并在字符串中标记出该字符。在该方法中,程序首先将输入的字符串转换成字符数组,然后遍历该数组,将每个字符添加到列表中。接着,程序再次遍历字符数组,找到最大的字符以及它所在的位置,并将该字符在列表中的位置标记出来。最后,程序将列表中的字符拼接成字符串并返回。如果有多个最大的字符,则程序会在字符串中标记它们所有的位置。insertStr 方法用于在列表中插入标记。
package tiantian; import java.util.*; public class Max{ public static void main(String[] args) { System.out.println("请输入:"); Scanner sc=new Scanner(System.in); while(sc.hasNext()) { String a=sc.nextLine(); //System.out.println(a); String b=maxString(a); System.out.println(b); /*char[]c=a.toCharArray(); char max=c[0];int index=0; for(int i=0;i<c.length;i++) { if(c[i]>max) max=c[i]; index=i; } System.out.println(max); System.out.println(index); */ } sc.close(); } private static String maxString(String a) { char[] c=a.toCharArray(); char max=c[0]; int index=0; List<Object> list=new ArrayList(); for(int i=0;i<c.length;i++) { list.add(c[i]); } for(int i=0;i<c.length;i++) { if(max<=c[i]) { max=c[i]; index=i; } } int k=0; for(int i=0;i<c.length;i++) { //int k=0; if(c[index]==c[i]) { insertStr(list,i,k); k++; } } String ss=""; for(Object object:list) { ss+=object; } return ss; } private static void insertStr(List<Object> list, int i, int k) { list.add(i+1+k,"(max)"); } } 代码详细解释
这段代码实现的功能是:输入一个字符串,找到其中的最大字符,并在该字符后面加上“(max)”标识。以下是代码的详细解释:
```java
package tiantian;
import java.util.*;
public class Max {
public static void main(String[] args) {
System.out.println("请输入:");
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String a = sc.nextLine(); // 读取输入的字符串
String b = maxString(a); // 调用maxString方法查找最大字符,并加上标识
System.out.println(b); // 输出结果
}
sc.close();
}
private static String maxString(String a) {
char[] c = a.toCharArray(); // 将字符串转换为字符数组
char max = c[0]; // 假设第一个字符是最大的
int index = 0; // 记录最大字符的位置
List<Object> list = new ArrayList(); // 创建一个列表,用于存储字符和标识
for (int i = 0; i < c.length; i++) { // 遍历字符数组,将字符加入列表
list.add(c[i]);
}
for (int i = 0; i < c.length; i++) { // 再次遍历字符数组,找到最大字符的位置
if (max <= c[i]) {
max = c[i];
index = i;
}
}
int k = 0;
for (int i = 0; i < c.length; i++) { // 第三次遍历字符数组,在最大字符后面加上标识
if (c[index] == c[i]) {
insertStr(list, i, k); // 调用insertStr方法,在i+1+k的位置插入“(max)”标识
k++;
}
}
String ss = "";
for (Object object : list) { // 将列表中的字符和标识组合成字符串
ss += object;
}
return ss; // 返回加上标识的字符串
}
private static void insertStr(List<Object> list, int i, int k) {
list.add(i + 1 + k, "(max)"); // 在列表的i+1+k的位置插入“(max)”标识
}
}
```
具体来说,代码分为两个方法:
1. `maxString`方法接受一个字符串作为参数,返回加上“(max)”标识的新字符串。首先将字符串转换为字符数组,然后遍历字符数组找到最大字符的位置。接着再次遍历字符数组,在最大字符后面加上“(max)”标识。最后将字符和标识组合成一个新字符串并返回。
2. `insertStr`方法接受三个参数:一个列表、一个位置i和一个偏移量k。该方法在列表的i+1+k的位置插入“(max)”标识。
阅读全文