请给我个简洁的答案
解决方案 »
- 求教高手关于正则表达式实现定位查找和文字计数统计问题(纯正则表达式,非程序实现)
- List<Object> 对象怎么转换为List<RefDTO>?
- InetAddress与URL 区别 java
- 简单的布局问题&关于简单的JSP问题
- Java调用UNIX命令简单问题~~~~~急急急
- 求助关于取得数据库所有表名的方法
- 怎样在AWT里显示说明标签?
- 感谢各位前辈chenyuan_tongji、hardas、iloveyouonlyonce、eyeieye的帮助!!!
- 新手送分,簡單的Jdbc問題
- JAVASERVERLET是什么?实现SERVERLET编程需要那些软件?
- 请问怎么对Eclipse插件程序做UnitTest?
- 请教用java做个数据接口的东西
int[] i = { 1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };
System.out.println("结果:");
xuanZe(i);
System.out.println();
} // 选择排序算法
public static void xuanZe(int[] x) {
for (int i = 0; i < x.length; i++) {
int lowerIndex = i;
// 找出最小的一个索引
for (int j = i + 1; j < x.length; j++) {
if (x[j] < x[lowerIndex]) {
lowerIndex = j;
}
}
// 交换
int temp = x[i];
x[i] = x[lowerIndex];
x[lowerIndex] = temp;
}
for (int i : x) {
System.out.print(i + " ");
}
}}
public static void selectionSort(int[] number){
for(int i=0;i<number.length-1;i++){
int m=i;
for(int j=i+1;j<number.length;j++)
if(number[j]<number[m]) //选出最小数的下标
m=j;
if(i!=m)
swap(number,i,m);
}
} private static void swap(int[] number,int i,int j){
int t;
t=number[i];
number[i]=number[j];
number[j]=t;
}
{
// 将 a 中整数序列重新排列成自小至大有序的整数序列。
for ( i = 0; i< n-1; ++i )
{
j = i;
for ( k = i+1; k < n; ++k )
if (a[k] < a[j] ) j = k;
if ( j != i ){w = a[j]; a[j] = a[i]; a[i] = w;}
}
}
给你个鄙人写的public class Sort { // 递增
public static void bubbleSort(int... arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
temp = 0;
for (int j = arr.length - 1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
arr[j] ^= arr[j - 1];
arr[j - 1] ^= arr[j];
arr[j] ^= arr[j - 1];
temp++;
}
}
if (temp == 0) {
break;
}
}
}
// 选择排序
public static void selectSort(int... arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
temp = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[temp]) {
temp = j;
}
}
if (temp == i)
continue;
arr[i] ^= arr[temp];
arr[temp] ^= arr[i];
arr[i] ^= arr[temp];
}
}
//快排
public static void quickSort(int[] arr) {
innerQuickSort(arr, 0, arr.length - 1);
} private static void innerQuickSort(int[] arr, int head, int end) {
if (head >= end) {
return;
}
int index = head;
for (int i = head; i < end; i++) {
if (arr[i] <= arr[end] && index != i) {
arr[index] ^= arr[i];
arr[i] ^= arr[index];
arr[index] ^= arr[i];
index++;
}
}
if (index != end) {
arr[index] ^= arr[end];
arr[end] ^= arr[index];
arr[index] ^= arr[end];
}
innerQuickSort(arr, head, index - 1);
innerQuickSort(arr, index + 1, end);
} public static void insertSort(int[] arr) {
int index, temp;
for (int i = 1; i < arr.length; i++) {
index = i;
temp = arr[i];
while (index-- > 0 && arr[index] > temp) {
arr[index + 1] = arr[index];
}
arr[index + 1] = temp;
}
} // 堆排序
public static void heapSort(int[] arr) {
for (int i = arr.length / 2; i >= 0; i--) {
maxHeap(arr, i, arr.length);
}
for (int i = arr.length - 1; i >= 1; i--) {
arr[0] ^= arr[i];
arr[i] ^= arr[0];
arr[0] ^= arr[i];
maxHeap(arr, 0, i);
}
} // 建最大堆
private static void maxHeap(int[] arr, int index, int end) {
int q;
while (index < end) {
q = 2 * index + 1;
if (q >= end)
break;
if ((q < end - 1 && (arr[q + 1] > arr[q])))
q = q + 1;
// 如果某一节点的值小于其子节点的最大值,将其交换
if (arr[q] > arr[index]) {
arr[q] ^= arr[index];
arr[index] ^= arr[q];
arr[q] ^= arr[index];
index = q;
} else {
break;
}
}
}// 递归归并排序
public static void mergeSortRecursion(int... arr) {
if (arr.length > 1) {
int len1 = arr.length / 2;
int len2 = arr.length - len1;
int[] arr1 = new int[len1];
int[] arr2 = new int[len2];
for (int i = 0; i < len1; i++) {
arr1[i] = arr[i];
}
for (int j = 0; j < len2; j++) {
arr2[j] = arr[len1 + j];
}
mergeSortRecursion(arr1);
mergeSortRecursion(arr2);
int index1 = 0;
int index2 = 0;
int index = 0;
while (index1 < len1 && index2 < len2) {
if (arr1[index1] < arr2[index2]) {
arr[index++] = arr1[index1++];
} else {
arr[index++] = arr2[index2++];
}
}
while (index1 < len1) {
arr[index++] = arr1[index1++];
}
while (index2 < len2) {
arr[index++] = arr2[index2++];
}
}
}
// 原地循环归并排序
public static void mergeSortCircle(int[] arr) {
int[] rep = new int[arr.length];
int[] temp;
int inc = 1;
int index = 0;
int first = 0;
int second = 0;
int times = 0;
while (inc < arr.length) {
index = 0;
for (int i = 0; i < arr.length; i += inc * 2) {
first = i;
second = i + inc;
while (first < i + inc && first < arr.length
&& second < i + inc * 2 && second < arr.length) {
if (arr[first] <= arr[second]) {
rep[index++] = arr[first++];
} else {
rep[index++] = arr[second++];
}
}
while (first < i + inc && first < arr.length) {
rep[index++] = arr[first++];
}
while (second < i + inc * 2 && second < arr.length) {
rep[index++] = arr[second++];
}
}
inc *= 2;
times++;
temp = arr;
arr = rep;
rep = temp;
}
if (times % 2 == 1) {
temp = arr;
arr = rep;
for (int i = 0; i < temp.length; i++) {
arr[i] = temp[i];
}
}
}
}
我给你的就是选择排序。public class Sort { public static void main(String[] args) {
int[] i = { 1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };
System.out.println("冒泡排序的结果:");
maoPao(i);
System.out.println();
System.out.println("选择排序的结果:");
xuanZe(i);
System.out.println();
System.out.println("插入排序的结果:");
chaRu(i);
System.out.println();
System.out.println("希尔排序的结果:");
shell(i);
} // 冒泡排序算法
public static void maoPao(int[] x) {
for (int i = 0; i < x.length; i++) {
for (int j = i + 1; j < x.length; j++) {
if (x[i] > x[j]) {
int temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
for (int i : x) {
System.out.print(i + " ");
}
} // 选择排序算法
public static void xuanZe(int[] x) {
for (int i = 0; i < x.length; i++) {
int lowerIndex = i;
// 找出最小的一个索引
for (int j = i + 1; j < x.length; j++) {
if (x[j] < x[lowerIndex]) {
lowerIndex = j;
}
}
// 交换
int temp = x[i];
x[i] = x[lowerIndex];
x[lowerIndex] = temp;
}
for (int i : x) {
System.out.print(i + " ");
}
} // 插入排序算法
public static void chaRu(int[] x) {
for (int i = 1; i < x.length; i++) {// i从一开始,因为第一个数已经是排好序的啦
for (int j = i; j > 0; j--) {
if (x[j] < x[j - 1]) {
int temp = x[j];
x[j] = x[j - 1];
x[j - 1] = temp;
}
}
}
for (int i : x) {
System.out.print(i + " ");
}
} // 希尔排序算法
public static void shell(int[] x) {
// 分组
for (int increment = x.length / 2; increment > 0; increment /= 2) {
// 每个组内排序
for (int i = increment; i < x.length; i++) {
int temp = x[i];
int j = 0;
for (j = i; j >= increment; j -= increment) {
if (temp < x[j - increment]) {
x[j] = x[j - increment];
} else {
break;
}
}
x[j] = temp;
}
} for (int i : x) {
System.out.print(i + " ");
}
}
}