全部 文章 问答 分享 共找到1个相关内容
[文章] Java-数据结构和算法-插入排序(insertion sort)
Java-数据结构和算法-插入排序(insertionsort)相关文章接下来我们看看插头排序插入排序我打牌一般不输,我有一个跟输赢无关的习惯。就是牌会按大小顺序排列。从摸牌,再到排序这么一个过程,其实就是插入排序。算法描述插入排序分为两组数据,已经排序的数据,等待排序的数据从等待排序的数据,向已经排序的数据中对比插入代码实现我这里偷懒,用了一下集合publicclassMain{publicstaticvoidmain(String[]args){int[]data=newint[]{344,4,345,23,566,456,34,5,78,45,23,56673};//我们使用集合比较方便插入,当然啦,集合直接就有工具类去排序了。List<Integer>sortedData=newArrayList<>();for(inti=0;i<data.length;i++){intcurrent=data[i];insert(sortedData,current);output(sortedData);}output(sortedData);}privatestaticvoidinsert(List<Integer>sortedData,intcurrent){//如果size为0,直接插入,不需要进行比较if(sortedData.size()==0){sortedData.add(current);}elseif(sortedData.size()==1){if(current>sortedData.get(0)){sortedData.add(current);}else{sortedData.add(0,current);}}else{for(inti=0;i<sortedData.size();i++){if(current<sortedData.get(i)){sortedData.add(i,current);break;}if(i==sortedData.size()-1){//sortedData.add(current);break;}}}}privatestaticvoidoutput(List<Integer>data){System.out.print("[");for(Integerdatum:data){System.out.print(""+datum+"");}System.out.println("]");}}那用数组怎么写呢?publicclassMainTwo{publicstaticvoidmain(String[]args){int[]data=newint[]{344,4,345,23,566,456,34,5,78,45,23,56673};//默认值全为0int[]sortData=newint[data.length];for(inti=0;i<data.length;i++){//取数据intcurrent=data[i];output(sortData);//插入到数组里insert(sortData,current,i);output(sortData);}}privatestaticvoidinsert(int[]sortData,intcurrent,intindex){//index表示已经插入了多少个嘛if(index==0){sortData[0]=current;}else{//比大小for(inti=0;i<index;i++){if(current<sortData[i]){inttmp=sortData[i];sortData[i]=current;//就在i这个地方了for(intj=i+1;j<=index;j++){intnext=sortData[j];sortData[j]=tmp;tmp=next;}break;}if(i==index-1){//放到最后面去了sortData[index]=current;}}}}privatestaticvoidoutput(int[]data){System.out.print("[");for(intdatum:data){System.out.print(datum+"");}System.out.println("]");}}单数组实现publicclassInsertionSort{publicstaticvoidmain(String[]args){int[]data=newint[]{344,4,345,23,566,456,34,5,78,45,23,56673};//从第二个开始遍历每一个元素for(inti=1;i<data.length;i++){//拿到要排序的元素inttarget=data[i];//所有的元素往后移动,直到target找到合适的位置intj=i-1;//j表示已经排序的数量while(j>=0&&target<data[j]){//数据往右移动//data[j+1]第一个就是data[i]data[j+1]=data[j];j--;}data[j+1]=target;}}}排序结果集合写的排序结果用数据写的结果:
2020-03-31 23:30 · 插入排序 / 算法 / 排序 / insertion / sort
  • 1