天天看点

快速排序非递归实现

简单写了一下。看代码:

package a;

import java.util.Random;
import java.util.Stack;

public class CopyOfTest1 {

       public static void main(String ss[]) {
             int[] data = new int[10];
            Random rand = new Random();

             for (int i = 0; i < data.length; i++) {
                  data[i] = rand.nextInt(100);
            }
             for (int i = 0; i < data.length; i++) {
                  System. out.print(data[i] + "\t" );
            }
            System. out.println();
             get(data);
             for (int i = 0; i < data.length; i++) {
                  System. out.print(data[i] + "\t" );
            }
      }

       public static void get(int[] data) {
            Stack<Me> s = new Stack<Me>();
            Me a = new Me();
            a. low = 0;
            a. high = data.length - 1;
            s.push(a);
             while (!s.isEmpty()) {
                  Me b = s.pop();
                   int t_low = b.low ;
                   int t_high = b.high ;
                   int low = b.low ;
                   int high = b.high ;
                   int pivot = data[low];
                   while (low < high) {
                         while (low < high && data[high] >= pivot) {
                              high--;
                        }
                        data[low] = data[high];
                         while (low < high && data[low] <= pivot) {
                              low++;
                        }
                        data[high] = data[low];
                  }
                  data[low] = pivot;
                  Me c = new Me();
                   if (low == t_high) {
                        c. low = low;
                  } else {
                        c. low = low + 1;
                  }
                  c. high = t_high;
                   if (c.low == c.high) {

                  } else
                        s.push(c);
                  Me d = new Me();
                  d. low = t_low;
                  d. high = low - 1;
                   if (d.low == d.high) {

                  } else
                        s.push(d);
            }
      }
}

class Me {
       int low , high ;

       @Override
       public String toString() {
             return "Me [high=" + high + ", low=" + low + "]" ;
      }

}
           

继续阅读