随堂笔记7.30:数组,四种排序方法-------1

数组

一系列相同类型的元素
有序的
连续的内存空间
初始化时固定大小

数组声明的三种方法

int[] a = new int[][10];
//申请10个int的内存空间,并初始化所有的元素为0
int[] a = {1,2,3};
//只能在声明时使用
 int[] a = new int[]{1,2,3};
//可以在非声明时使用 

System.currentTimeMills();//获得系统当前时间

交换两个变量的值

//交换两个变量的值 用异或做位运算效率高
public static void Change(int[] a, int i, int j) {
    if (i == j) {
   //内存地址相同不能交换
      return;
    }
    a[i] = a[i] ^ a[j];
    a[j] = a[i] ^ a[j];
    a[i] = a[i] ^ a[j];
}

选择排序

//选择排序,将第一个数字记录,然后依次与后边的数字比较,比第一个小就换位置。
public static void sort(int[] a){
    for (int i = 0; i < a.length - 1; i++) {
        int min = i;
        for (int j = i + 1; j < a.length -1; j++) {
            if (a[min] > a[j]) {
                 min = j;
            }
        }
        if (min != i) {
            Change(a, i, min);
        }
    }
}

插入排序

//插入排序,从第二个数字开始,先按顺序排列前面的数字,后边数字依次插入往前比较。
public static void sort2(int[] a){
    for (int i = 1; i < a.length - 1; i++) {
        for (int j = i; j > 0; j--) {
            if (a[j] < a[j - 1]) {
                Change(a, j, j - 1);
            }else {
                break;//前面已经排好序,如果有比自己小的前面就不需要比较了
            }
        }
    }
}

冒泡排序

//冒泡排序
public static void sort3(int[] a){
    for (int i = a.length-1; i > 0; i--) {
        for (int j = 0; j < i - 1; j++) {
            if (a[j] < a[j + 1]) {
                Change(a, j, j + 1);
            }
        }
    }
}

快速排序

//快速排序,qsort只传入数组在跳到第二个方法,qsort2需要开始和结束的位置
数组中随机选择一个数,比这个数小的放在左边,比这个数大的放在右边。然后左边,右边分别看做数组再次进行上边的过程。

:快速排序需要先得到数组的中间随机一位数字,然后将这个数字和最后一位作交换,
前面的数字依次和最后一位进行比较大小,这是需要index来记位,index初始为数组第一个数的位置,有比最后一位数字小的往左移动,index++ 循环结束时index所指位置跟end位置初始选中的数字进行交换。这是左边是小的,右边是大的。左边看做一个数组,右边看做一个数组。利用递归再次进入循环,递归结束的条件为start == end;

  public static void qsort(int[] a){
      qsort2(a, 0, a.length - 1);
  }

  public static void qsort2(int[] a, int start, int end) {
         if(start >= end){
             return;
         }
      int index = random.nextInt(1) +end;
      System.out.println("index="+index);
      Change(a, index, end);
      index = start;

      for (int i = start; i < end ; i++) {
          if (a[i] < a[end]) {
              Change(a,i,index);
              index++;
              System.out.println("index2="+ index);
          }
      }
//  if (a[index] >a[end]) {
          Change(a,index,end);
 //  }
      System.out.println(Arrays.toString(a));//输出数组每次排列后的数列情况
      qsort2(a, 0, index - 1);
      qsort2(a, index + 1, end);
  }

示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值