• 经典排序——插入排序


    插入排序:是利用第1次排序到第p次排序,位置0p-1上的位置都是排序好的。

    这样只要比较一下[i-1][i]就知道还要不要进入第2个循环。

    如果[i-1]>[i]那么就要继续进入第二个循环。

    将这个位置的[i]存起来temp;在令j=i;开始循环交换位置,temp[j]=temp[j-1]

    这个时候进行下一步判断,temp[j-1]>temp,如果true继续交换,如果false,让test[j]=temp;即可

    数组34,8,64,51,32,21

    先比较34,8看要不要进入第二个循环,34>8,进入

    交换34,8的位置  8,34 因为j--的原因j=0,退出循环,

    i++,比较34,64   34<64不用进入

    i++,比较64,51 64>51进入第二次循环。交换位置,8,34,64,64,虽然j-->0,但是temp[j-1]<temp一样退出循环,进行test[j]=temp,8,34,51,64

    i++,比较64,32 64>32进入第二个循环,交换位置是这样的8.3451,64,64

    要明白这个8,34,51,64,64。是利用这个才实现将元素的插入的。找到一个元素,也想这个元素在前边排序的中间,正是因为这个才能准确

    的这个元素插入到准确的位置。

    并且也不能将test[j-1]>test做成if的判断条件,因为即使没有产生交换也会造成j--从而不能排序不说,整个数组的数据都发生了变化。

    代码如下:

    public static void fastSortT(int [] test){
       for(int i=1;i<test.length;i++){
        if(test[i-1]>test[i]){//因为每次排序都会将前边的i-1个数排序,所以只要比较一个前边排序的最后一个就可以了,如果最大的也要小的话
         //那就不要排序了,直接就是这样了,只有最后一个比他要大才会细分。
         int temp = test[i];//将test[i]这个数保存起来。
         int j;
         for(j=i;j>0&&test[j-1]>temp;j--){
          test[j]=test[j-1];
         }
                        test[j] = temp;
        }
       }
      }

    入门易,精通难
  • 相关阅读:
    浏览器的同源策略及跨域解决方案
    前端开发工具系列
    初始Vue
    form表单组件
    聚合和分组F,Q和事物,cookie,session
    js循环找id
    div模拟textarea文本域轻松实现高度自适应
    prototype原型
    Javascript异步编程方法
    js中map、filter用法
  • 原文地址:https://www.cnblogs.com/chenshun-2016/p/5975368.html
Copyright © 2020-2023  润新知