在Java中,可以使用归并排序或计数排序来实现稳定排序。 这里我们介绍一下这两种排序方法。
- 归并排序:
归并排序是一种分治算法。 将数组分成两半,对每一半进行递归排序,最后将已排序的两半合并为一个已排序的数组。 合并排序是一种稳定的排序算法,因为相等的元素在合并过程中保持其原始顺序。
下面是合并排序的 Java 实现:
public 类 合并排序 {
public 静态 void main(String[] args) {
int[] arr = {38, 27, 43、3、9、82, 10};
mergeSort(arr, 0} span> span>, arr.length - 1);
for ( int num : arr) {
System.out.print(num + " ");
}
}
公共 静态 void mergeSort(int[] arr, int 左,int 右) {
if (左<右) {
int mid =(左 + 右)/ 2;
mergeSort(arr, left, middle);
mergeSort(arr, middle + 1, right) ;
合并(arr, 左, 中, 右);
}
}
public 静态 无效 合并 (int[] arr,int 左,int 中间,int 右) {
int[] temp = 新 int[右 - 左 + 1];
int i = 左;
int j = mid + 1;
int k = 0;
之间 (我 <= 中间 && j <= 右) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
之间 (i <= Mid) {
temp[k++] = arr[i++];
}
while (j <= right ) {
temp[k++] = arr[j++];
}
System.arraycopy(temp, 0, arr, left , temp.length );
}
}
- 计数排序(排序):
计数排序是一种非比较排序算法,通过计算数组中每个元素出现的次数来排序,这是因为当元素相等时排序算法是稳定的。处理时相对顺序保持不变
这是计数排序的 Java 实现:
公开类 计数排序 {
公共 静态 无效 main(String[] args) {
int[] arr = {38, 27, 43,3,9,82, 10};
计数排序(arr);
for (int num : arr) {
System.out.print(num + " ");
}
}
公共 静态 void 计数排序(int[] arr) {
if (arr == null || arr.length == 0) {
返回;
}
int 最大 = Integer.MIN_VALUE;
int 分钟 = Integer.MAX_VALUE;
for (int num : arr) {
max = Math.max(max, num);
min = Math.min(min, num);
}
int[]计数 = 新 int[最大值 - 最小值 + 1];
for (int num : arr) {
count[num ] - 分钟]++;
}
int 索引 = 0;
for (int i = 0; i++) {
while (count[i] > 0) {
arr[index++ ] ] = i + min;
count[i]--;
}
}
}
}
请注意,计数排序仅在以下情况下有效: 使用整型数组时,最大值和最小值的差值不能太大。 如果太大,count数组会占用大量内存。
以上内容来源于互联网,不代表本站全部观点。 欢迎关注:zhujipindao.com
评论前必须登录!
注册