排序算法简单总结

冒泡排序:

冒泡排序是一个很简单的排序方式,但效率相对来说不高

排序规则是:两两进行比较,根据大小交换位置,进行多次比较,外层循环n-1次,内层循环n-1-i次

在这里插入图片描述

//提供一个数组
int array[] = new int[n];
//临时变量
int temp;
for(int i = 0;i < array.length-1;i++){
  for(int j = 0;j<array.length-i-1;j++){
    if(array[j]>array[j+1]){
      temp = array[j];
      array[j] = array[j+1];
      array[j+1] = temp;
    }
  }
}
选择排序:

选择排序是一种简单的排序,不稳定排序规则

排序规则是:(升序)认为第一个是最小的数字,每次进行和后一个进行比较,根据大小进行比较

一次循环最后将最小的元素放在第一个,下一次继续未排序的元素

//提供一个数组
int array[] = new int[n];
//临时变量
int temp;
for(int i = 0;i<array.length;i++){
  for(int j = i+1;j<array.length;j++){
    if(array[i]>array[j]){
      temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
  }
}
插入排序:

插入排序是一种简单而稳定的排序方式

排序规则:

第一次:
将下标为0的元素做为-个有序的序列,下标为1的元素就是待排序的元素,用下标为1的元素与下标为0的元素进行比较:如果下标为1的元素小于小标为0的元素,将下标为0的元素的值移动到下标为1的元素上,并记录下标0为插入点,并将下标为1的元素的值赋给下标0元素

第二次:
下标为0和1的元素都是有序的,下标为2的元素为待排序元素使用下标为2的元素与下标为1的元素判断,如果下标2元素的值小于小标1元素的值,将下标1元素的值移动到小标2的位置,并记录下标1为待插入的插入点,然后在使用待排序的元素与下标0的元素比较,如果待排序的元素小于下标0的元素,将下标0的元素移动到下标1元素上,并记录下标0位新的插入点;判断结束将待排序元素插入到最终的插入点的元素上

//提供一个数组
int array[] = new int[n];
//升序排序
for(int i = 0;i,array.length;i++){
  //拿到待排序的元素
  int temp = array[i];
  //待排序的位置
  int insertPost = -1;
  //对此位置之前的元素进行循环
  for(int j = i-1;j>0;j--){
    //如果当前元素小于之前的某一个元素x
    if(temp<array[j]){ 
      //将x元素替换此元素
      array[j+1]=array[j];
      //记录x元素的位置
      insertPost = j;
    }else{
      break;
    }
    if(insertPost!=-1){
      //将记录的位置进行元素更新
      array[insertPost] = temp;
    }
  }
}
快速排序:

快速排序:

快速排序之所以称之为快速排序就是因为在实践中,这个算法是最快的排序算法。它的平均运行时间O(NlogN)。最坏的时间复杂度为O(N^2)。

排序规则:任意取一个元素为中心轴,然后从数组首尾两边进行检索,大于中心轴的元素放到尾部–;大于中心轴的元素放在首部++;最后首尾重合时候放入中心轴;最后再对中心轴左边的、右边的数组进行递归排序,一直保持中心轴左边的数据都小于中心轴值,右边的大于中心轴值,左右边进行交替变化。

 public static void sort(int a[], int low, int hight) {
   int i,j,index;
   //判断位置
   if(low>hight)
     return;
   i = low;
   j = hight;
   //保持L<R
    index = a[i]; // 用子表的第一个记录做基准
   while(i<j){  
     //后面的大  不改变  
     while(i<j&&a[j]>=index)
       //R往前移动
       j--;
     //后面的小  移动  
     if(i<j)
       //移动位置是左指向的位置   添加之后从左+1,再从左边开始
       a[i++] = a[j];
     //前面的小  不改变  
     while(i<j&&a[i]<index)
       //L往后移动
       i++;
     if(i<j)
        //移动位置是右指向的位置   添加之后从右-1,再从右边开始
       a[j--] = a[i];
      }
     //放回初始元素LR重合位置
     a[i] = index;
     //继续递归中心轴左边和右边的数组
     sort(a,low,i-1);
     sort(a,i+1,hight);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值