//构建数组
public class App {
int[] arr;
int pos;//长度
// 有参构造
public App(int size) {
this.pos = size;
// 随机数
Random rand = new Random(1024);//1024是一个伪随机数
arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = rand.nextInt(100);//随机数在100以内
}
}
//冒泡排序(从小到大)
public void popo() {
for (int i = 0; i < pos - 1; i++) {//外层循环表示排序的趟数,pos个数总共进行pos-1趟排序
for (int j = 0; j < pos - 1 - i; j++) {//内层循环比较的次数
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//选择排序(从大到小)
public void option() {
for (int i = 0; i < pos - 1; i++) {//外层循环表示排序的趟数,pos个数总共进行pos-1趟排序
int max = i;//存储最值的位置
for (int j = i + 1; j < pos; j++) {//内层循环表示每一趟参与排序的数字
if (arr[max] < arr[j]) {//找到当前序列中最大数字所在的位置
max = j;
}
}
if (i != max) {//当找到的最大数字的位置发生变化的时候,才交换两个数的位置
int temp = arr[ i];//把最大的数放在当前序列的最前面。
arr[i] = arr[max];
arr[max] = temp;
}
}
}
//快速排序法(从大到小)
public void quick(int low, int high) {
int lo = low;
int hi = high;
if (lo >= hi) {//当两指针重叠时 递归结束
return;
}
boolean flag = false;
while (lo < hi) {
if (arr[lo] < arr[hi]) {
int temp = arr[lo];
arr[lo] = arr[hi];
arr[hi] = temp;
flag = !flag;//取反 一旦产生交换就动指针
}
if (flag) {//不产生交换就 不动指针
lo++;
} else {
hi--;
}
}
lo--;
hi++;//变成两个数组在来一次
quick(low, lo);
quick(hi, high);
}
public void display() {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
App app = new App(10);
// long time = System.currentTimeMillis();
app.display();
// app.popo();
// app.option();
app.quick(0, 5);
app.display();
// System.out.println(System.currentTimeMillis() - time);
}
}
冒泡排序、选择排序、快速排序
最新推荐文章于 2024-10-30 16:47:45 发布