二分法(书上的样例): public class ArrayQSort { static void qsort(int array[], int first, int last) { int low = first; int high = last; if (first >= last) return;
int mid = array[(first+last)/2]; do { while (array[low] < mid) low++; while (array[high] > mid) high--;
if (low <= high) { int temp = array[low]; array[low++] = array[high]; array[high--] = temp; } } while (low <= high);
qsort(array, first, high); qsort(array, low, last); } public static void main(String[] args) { int array[] = new int[1000]; System.out.println("Before Sort"); for (int i=0; i< array.length; i++) { array[i] = (int)(Math.random() * 1000.0); System.out.println(array[i]); }
List list = new ArrayList(10);
Integer a[]=new Integer[10];
Random rand = new Random();
System.out.println("The ArrayList Sort Before:");
for (int i=0;i<10;i++ )
{
a[i]=new Integer(Math.abs(rand.nextInt()/100000000)) ;
list.add(a[i]);
System.out.println("a["+i+"]="+a[i]);
}
Object[] o = list.toArray();
Arrays.sort(o);
list.clear();
System.out.println("The ArrayList Sort After:");
for (int i=0;i<10;i++ )
{
System.out.println("a["+i+"]="+o[i]);
}
如果他再问,让他去问JDK!
第二个问题:2.ArryList...调用remove()方法后要重新排序.影响性能!用LinkedList
list.add("1");
可以看到list第一个元素和第二元素具有相同的值,List可以允许有重复的值出现。
如果严格要求里面的值不同,就用MAP来存储。
Set set=new TreeSet();
for(int i=0;i<x.length;i++){
set.add(new Integer(x[i]);
}
for(Iterator it=set.iterator();it.hasNext();){
System.out.println(((Integer)it.next()).intValue());
}
static void swap(int[] arr,int i,int j){
arr[i]=arr[i]^arr[j];
arr[j]=arr[i]^arr[j];
arr[i]=arr[i]^arr[j];
}
static void sort(int[] arr,int off,int len){
if(len==1) return; int key=arr[off+(len>>1)]; int start=off;
int end=off+len-1;
while(true){
//find a bigger from left
while( start<end && arr[start]<key )
start++;
//find a smaller form right;
while( start<end && arr[end]>key )
end--;
//swap;
if(start<end){
swap(arr,start,end);
//is must
start++;
}
else break;
}
sort(arr,off,start-off);
sort(arr,start,len-start+off);
}
REMOVE方法影响性能,那是必然的哦!
排序的方法多了,再说ArrayList本来也就实现了的,
要从根本上解决重复数的问题,就不要用list,用map就可以了,当遇到重复时,会自动忽略的,
路过,学习
public class ArrayQSort { static void qsort(int array[], int first, int last) {
int low = first;
int high = last;
if (first >= last)
return;
int mid = array[(first+last)/2];
do {
while (array[low] < mid)
low++;
while (array[high] > mid)
high--;
if (low <= high) {
int temp = array[low];
array[low++] = array[high];
array[high--] = temp;
}
} while (low <= high);
qsort(array, first, high);
qsort(array, low, last);
} public static void main(String[] args) {
int array[] = new int[1000];
System.out.println("Before Sort");
for (int i=0; i< array.length; i++) {
array[i] = (int)(Math.random() * 1000.0);
System.out.println(array[i]);
}
qsort(array, 0, array.length-1); System.out.println("After Sort");
for (int i=0; i< array.length; i++) {
System.out.println(array[i]);
} }
}
为什么我们自己硬要去折腾呢
多想想怎么去解决业务方面的问题
Arrays.sort() 不行吗