删除重复值
有一个整数数组, 去掉该数组中重复元素后排序打印,
(相同的数字只保留一个, 禁止使用set和语言本身提供的函数)
输入:
第一行: 整数N 表示该数组的长度
第二行: 数组中每个元素的值An
(0<N<10000, 0<An<1000)
输出:
去掉重复元素后的有序数组
样例输入:
11
1 3 4 2 6 2 6 2 8 2 6
样例输出:
1 2 3 4 6 8
题目分析:
- 有序排列
- 删除重复
- 数组长度固定,需要额外数组
public class Task1211 {
public static void main(String[] args) {
//已知数组
int[] nums = {11,1,3,4,2,6,2,6,2,8,2,6};
int[] temp = new int[nums.length]; //临时存放
//排序
for (int i = 0; i < nums.length -1; i++) {
for (int j = (i + 1); j < nums.length; j++) {
if(nums[i] > nums[j]) {
int temp1 = nums[i];
nums[i] = nums[j];
nums[j] = temp1;
}
}
//System.out.println(Arrays.toString(nums));
}
//删除重复
int a = 0; //记录不重复数组
temp[0] = nums[0]; //初值
for (int i = 1; i < nums.length; i++) {
if(temp[a] != nums[i]) {
a++;
temp[a] = nums[i];
}
}
int[] res = new int[a + 1]; //建立新数组保存所有不重复的值
for (int i = 0; i < res.length; i++) {
res[i] = temp[i];
}
System.out.println(Arrays.toString(res));
}
}
数组排序的几种常用方法
方法一:选择排序
public static void main(String[] args) {
int[] nums = {11,1,3,4,6,2,8};
System.out.println("排序前顺序:" + Arrays.toString(nums));
for (int i = 0; i < nums.length -1; i++) {
for (int j = (i + 1); j < nums.length; j++) {
if(nums[i] > nums[j]) {
int temp1 = nums[i];
nums[i] = nums[j];
nums[j] = temp1;
}
}
System.out.println("第" + (i + 1) + "次排序:" + Arrays.toString(nums));
}
}
方法二:冒泡排序
public static void main(String[] args) {
int[] nums = {11,1,3,4,6,2,8};
System.out.println("排序前顺序:" + Arrays.toString(nums));
for (int i = 0; i < nums.length -1; i++) {
System.out.println("第" + (i + 1) + "轮");
for (int j = 0; j < nums.length - i -1; j++) {
if(nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j +1] = temp;
}
System.out.println("第" + (j + 1) + "次排序:" + Arrays.toString(nums));
}
}
}
方式三:插入排序
public static void main(String[] args) {
int[] nums = {11,1,3,4,6,2,8};
System.out.println("排序前顺序:" + Arrays.toString(nums));
for (int i = 1; i < nums.length; i++) {
System.out.println("第" + i + "轮");
for (int j = i; j > 0; j--) {
if(nums[j] < nums[j - 1]) {
int temp = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = temp;
} else {
break;
}
System.out.println(Arrays.toString(nums));
}
}
}
方式四:Arrays类中的sort方法
此方法使用了优化的快速排序(QuickSort)算法。
static void sort(xxx[] a) //已被部分老师封杀
数组删除重复元素
方式一:创建新数组,存放元素,每次加入新元素前遍历新数组是否含有该值。
方式二:使用集合
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if(!(list.contains(nums[i]))) { //加入前判断是否包含
list.add(nums[i]);
}
}
//使用set集合直接过滤掉重复元素,set集合无序
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
非常气人的写法
public static void main(String[] args) {
int[] nums = {11,1,3,4,2,6,2,6,2,8,2,6};
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
System.out.println(list.toString());
}