62,621
社区成员
发帖
与我相关
我的任务
分享
package sort;
/** 常用的数组排序方法 */
public class ArraySort {
public static void main(String[] args) {
long[] i = { 5, 4, 8, 9, 1, 3, 2, 6, 7, 0 };
// i = bubbleSort(i);
// i = selectSort(i);
// i = insertSort(i);
// i = bubbleSortStrong(i);
i = paritySort(i);
for (int z = 0; z < i.length; z++) {
System.out.print(i[z] + " ");
}
}
/**
* 冒泡排序
*
* @see 通过循环不断的把最大的值提到前面
*/
public static long[] bubbleSort(long[] i) {
for (int out = 0; out < i.length; out++) {
for (int in = out; in < i.length; in++) {
if (i[in] > i[out]) {
i = swap(i, out, in);
}
}
}
return i;
}
/**
* 另一种冒泡排序
*
* @see 跟冒泡排序一样 不过是两头一起进行排序
* */
public static long[] bubbleSortStrong(long[] i) {
for (int out = 0; out < i.length; out++) {
for (int w = out; w < i.length; w++) {
if (i[w] > i[out]) {
i = swap(i, out, w);
}
}
for (int e = (i.length - 1) - out; e > 0; e--) {
if (i[e] < i[(i.length - 1) - out]) {
i = swap(i, e, (i.length - 1) - out);
}
}
}
return i;
}
/**
* 选择排序
*
* @see 冒泡排序的升级版 里循环的时候先提取出该数组中最大值的索引 然后外循环每循环一次交换一次值
* */
public static long[] selectSort(long[] i) {
int out, in, min;
for (out = 0; out < i.length - 1; out++) {
min = out;
for (in = out + 1; in < i.length; in++) {
if (i[in] > i[min]) {
min = in;
}
}
i = swap(i, out, min);
}
return i;
}
/** 插入排序
*
* @see 。。。。我说不太明白
* */
public static long[] insertSort(long[] i) {
int in, out;
for (out = 0; out < i.length; out++) {
long temp = i[out];
in = out;
while (in > 0 && i[in - 1] < temp) {
i[in] = i[in - 1];
--in;
}
i[in] = temp;
}
return i;
}
/** 奇偶排序 */
public static long[] paritySort(long[] i) {
boolean b = true;
while (b) {
b = false;
for (int odd = 1; odd < i.length - 1; odd += 2) {
if (i[odd] > i[odd + 1]) {
swap(i, odd, odd + 1);
b = true;
}
}
for (int even = 0; even < i.length - 1; even += 2) {
if (i[even] > i[even + 1]) {
swap(i, even, even + 1);
b = true;
}
}
}
return i;
}
/** 交换数组位置 */
public static long[] swap(long[] i, int x, int y) {
long r;
r = i[x];
i[x] = i[y];
i[y] = r;
return i;
}
}
public class PaiXu {
public static void main(String[] args) {
int[] score = new int[5];
//给数组赋值1-50的随机数
for (int i = 0; i < score.length; i++) {
score[i] = (int) (Math.random() * 50) + 1;
}
//外循环控制比较次数
for (int i = score.length; --i >= 0;) {
// 内循环比较左右相邻的每个数字
for (int j = 0; j < i; j++) {
//如果左边的数大于右边的数就换位置,把小的数冒泡
if (score[j] > score[j + 1]) {
// 将两个数字的位置进行对调
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
}
// 循环整个数组输出结果
for (int i = 0; i < score.length; i++) {
System.out.print(score[i] + " ");// 每个数字后加一个空格
}
System.out.println();// 一行结束
}
public static void sort(int[] src) {
int len = src.length - 1;
while(len > 0) {
int lastChanged = 0;
for(int i = 0; i < len; i++) {
if(src[i] > src[i+1]) {
src[i] = src[i] ^ src[i+1];
src[i+1] = src[i] ^ src[i+1];
src[i] = src[i] ^ src[i+1];
lastChanged = i;
}
}
len = lastChanged;
}
}
public static void sort(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.println(Arrays.toString(data));
for (int j = i + 1; j < data.length; j++) {
if (data[i] > data[j]) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
System.out.println(Arrays.toString(data));
}