static void Main(string[] args) { int[] arr = { 5, 1, 4, 2, 8 }; int temp; for (int i = 0; i < arr.Length; i++) { for (int j = 0; j < arr.Length - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); } Console.ReadKey(); } } class QuickSort { static void Main01(string[] args) { int[] arr = { 10, 7, 8, 9, 1, 5 }; int n = arr.Length; QuickSort_Recursive(arr, 0, n - 1); Console.WriteLine("Sorted array:"); Console.WriteLine(string.Join(" ", arr)); } static void QuickSort_Recursive(int[] arr, int start, int end) { if (start < end) { int partitionIndex = Partition(arr, start, end); QuickSort_Recursive(arr, start, partitionIndex - 1); QuickSort_Recursive(arr, partitionIndex + 1, end); } } static int Partition(int[] arr, int start, int end) { int pivot = arr[end]; int i = (start - 1); for (int j = start; j < end; j++) { if (arr[j] <= pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp1 = arr[i + 1]; arr[i + 1] = arr[end]; arr[end] = temp1; return i + 1; }
时间: 2023-02-23 22:06:34 浏览: 213
这段代码是在进行排序。
其中第一个 Main 函数实现了冒泡排序,它将一个整数数组进行排序,并在排序后输出。
第二个 Main 函数实现了快速排序,它将一个整数数组进行排序,并在排序后输出。它使用了递归来实现快速排序。
相关问题
public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6}; Random t = new Random(arr.length); int r = t.nextInt(arr.length); for (int i = 0; i < arr.length - 1; i++) { int temp = arr[i]; arr[i] = arr[r]; arr[r] = temp; } System.out.println(Arrays.toString(arr)); }只能生成一次随机结果,刷新几次结果都一样
这是因为 `Random` 构造函数传入的参数是一个种子值,而不是数组的长度。当种子值相同时,生成的随机数序列也是相同的。因此,你需要将 `Random` 构造函数中的参数换成一个随机的种子值,比如当前时间的毫秒数 `System.currentTimeMillis()`。这样每次运行程序时,种子值都会不同,生成的随机数序列也就不同了。修改后的代码如下:
```
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
Random t = new Random(System.currentTimeMillis());
int r = t.nextInt(arr.length);
for (int i = 0; i < arr.length - 1; i++) {
int temp = arr[i];
arr[i] = arr[r];
arr[r] = temp;
}
System.out.println(Arrays.toString(arr));
}
```
public class Main{ public static void main(String[]args){ int [] arr={1,7,3,5}; Sort st =new Sort(); st.sort(); st.traverse(); } static class Sort { int [] arr; void sort (){ for(int i=0;i<arr.length;i++){ for (int j=0;j< arr.length;j++) if(arr[j]<arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } void traverse(){ for(int i=0;i< arr.length;i++){ System.out.print(arr[i]+" "); } } } }以上代码有什么错误,并帮我讲一下怎么改,为什么这么改
以上代码有两个错误:
1. 在 Sort 类中的 sort 方法中,没有给数组 arr 赋值,导致 arr.length 报错。
2. 在 Sort 类中的 sort 方法中,循环条件中的 j 应该取到 arr.length-1,否则 arr[j+1] 会越界。
为了改正这些错误,可以将 Sort 类的构造方法中传入一个数组,然后在 sort 方法中使用该数组进行排序。修改后的代码如下:
```
public class Main {
public static void main(String[] args) {
int[] arr = {1, 7, 3, 5};
Sort st = new Sort(arr);
st.sort();
st.traverse();
}
static class Sort {
int[] arr;
public Sort(int[] arr) {
this.arr = arr;
}
void sort() {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void traverse() {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
}
```
在 Sort 类的构造方法中传入数组,然后在 sort 方法中使用该数组进行排序。同时在循环条件中,将 j 取到 arr.length-1,避免数组越界的错误。
阅读全文