①一维数组的冒泡排序
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
public static void sort(int[] values) {
int temp;
for (int i = 0; i < values.length; ++i) {
for (int j = 0; j < values.length - i - 1; ++j) {
if (values[j] > values[j + 1]) {
temp = values[j];
values[j] = values[j + 1];
values[j + 1] = temp;}
}
}
}
②一维数组的选择排序
static void sort(int[] nums) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
// 这里是按降序排列
if (nums[i] < nums[j]) {
int tem = nums[i];
nums[i] = nums[j];
nums[j] = tem;
}
}
}
}
③二维数组冒泡排序
public class sort2 {
public static void main(String[] args) {
int i = 0, j = 0, temp = 0;
int[][] nums1 = { { 34, 1, 22, 5 }, { 28, 98, 15, 32 },
{ 33, -5, 17, 41 } };
int rows = nums1.length;// 设rows为数组的行数
int cols = nums1[0].length;// 设cols为数组的列数
int qty = rows * cols;// 设qty为数组所有元素个数
System.out.println("原始二维数组:");
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
System.out.print(nums1[i][j] + " ");
}
System.out.println();
}
int[] nums2 = new int[qty];// 创建一个与二维数组大小一样的新的一维数组
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
nums2[i * cols + j] = nums1[i][j];// 把二维数组的每个值依次赋给一维数组。注意:一维数组的位置表示:[i*clos+j](即第i行*总列数cols+该行第j个)
}
}
for (i = 0; i < qty; i++) {
for (j = i + 1; j < qty; j++) {
if (nums2[i] > nums2[j]) {
temp = nums2[i];
nums2[i] = nums2[j];
nums2[j] = temp;
}
}
}
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
nums1[i][j] = nums2[i * cols + j];
}
}
// 打印已经按行,列排好序的二维数组
System.out.println("排好序的二维数组:");
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
System.out.print(nums1[i][j] + " ");
}
System.out.println();
}
}
}