算法训练营学习01---使用栈来完成插入排序

mac2022-06-30  33

1.两层for循环实现插入排序

public static ArrayList<Integer> sort(ArrayList<Integer> a) { for (int i = 1; i < a.size(); i++) {//从第二个元素开始,往前找到属于自己的位置下标 int tmp = a.get(i);//当前要插入有序数组的元素tmp int j = i - 1; for (; j >= 0; j--) { if (a.get(j)<tmp) {//目前拿到的a[j]值小于tmp,结束本轮 break; } else a.set(j + 1, a.get(j));//否则有序的a[0]~a[j]中a[j]后移让出一个位置 } a.set(j + 1, tmp);//将tmp插在j+1 } return a; }

2.使用自定义简单的栈来实现2个栈的插入排序

Stack自定义内容:

package day01; import java.util.ArrayList; public class Stack { public ArrayList<Integer> a;//核心内容区a列表 public Stack(){ a = new ArrayList<Integer>(10); ; } public int pop(){ if(a.size()<=0){ return -1;//-1表示栈为空 }else { return a.remove(a.size()-1);//弹出栈顶元素,返回它 } } public void push(int val){ a.add(val);//增加val元素 } public int top(){ return a.size()>0?a.get(a.size()-1):-1;//返回栈顶元素 } public ArrayList<Integer> print(){ return a;//打印核心数组 } }

插入排序实现部分:

Stack s = new Stack();//有序部分 Stack r = new Stack();//待排部分 //输入部分 r栈元素随机初始化 for(int in=0;in<100;in++) { r.push((int)(Math.random()*1000)); } //核心算法部分 while((tmp=r.pop())!=-1){//待排部分还有元素时 i=0; while(s.top()>tmp){//有序部分的栈顶比tmp大则弹出,让tmp找到合适的位置 r.push(s.pop());弹出的元素放r里面寄存 } s.push(tmp);//放入S栈 } //

转载于:https://www.cnblogs.com/CszShuzi/p/11059117.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)