问题描述:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作,并对自己的程序进行复杂性分析。
</pre><pre name="code" class="java">public class Quick_Sort {
public static int Partition(int r[], int first, int end) {
int i = first, j = end;
while (i < j) {
while (i < j && r[i] <= r[j])
j--;
if (i < j) {
Integer temp = r[i];
r[i] = r[j];
r[j] = temp;
i++;
}
while (i < j && r[i] <= r[j])
i++;
if (i < j) {
Integer temp = r[i];
r[i] = r[j];
r[j] = temp;
j--;
}
}
return i;
}
public static void QuickSort(int r[], int first, int end) {
int pivot;
if (first < end) {
pivot = Partition(r, first, end);
QuickSort(r, first, pivot - 1);
QuickSort(r, pivot + 1, end);
}
}
public static void main(String[] args) {
int r[] = { 32, 67, 40, 32, 89, 300, 400, 15 };
int s = 0;
int t = r.length - 1;
System.out.print("数组长度:" + r.length + "\n");
QuickSort(r, s, t);
int i=0;
System.out.print("输出数组元素:");
while (i <= t) {
System.out.print(r[i] + " ");
i++;
}
System.out.print("\n去除重复:");
for (int j = 0; j < t; j++) {
if (r[j]==r[j+1]) {
r[j+1]=-1; //当前元素与后一个元素相同时将后一个元素置为-1
}
}
int m=0;
while (m <= t) {
if (r[m]!=-1) {
System.out.print(r[m] + " ");
}
m++;
}
}
}