static void Sort(int[] array)
{
int length = array.Length;
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
} 我实在不理解第二个循环就是:for (int j = 0; j < length - 1 - i; j++),为什么还要j < length - 1 - i
{
int length = array.Length;
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
} 我实在不理解第二个循环就是:for (int j = 0; j < length - 1 - i; j++),为什么还要j < length - 1 - i
第一次排序后,最大的那个数找到了,你下一步,只要判断剩余9个数的顺序就行了就是length=length-1;冒泡一次,循环处理的数据就会少一个,所以再减去次数i。
int[] ary = { 5, 8, 63, 8, 9, 1, 3, 2, 45, 12 };
int[] ary1 = selectSort(ary);
int[] ary2 = insertSort(ary);
int[] ary3 = bubbleSort(ary); System.out.println(Arrays.toString(ary1));
System.out.println(Arrays.toString(ary2));
System.out.println(Arrays.toString(ary3));
} // 一: 选择排序
// 原理:
// a 将数组中的每个元素,与第一个元素比较如果这个元素小于第一个元素, 就将这个 两个元素交换.
// b 每轮使用a的规则, 可以选择出一个最小元素放到第一个位置.
// c 经过n-1轮比较完成排序
// 简单说: 每轮选择最小的放到前面. public static int[] selectSort(int[] ary) {
int count = 0;
for (int i = 0; i < ary.length - 1; i++) {
for (int j = i + 1; j < ary.length; j++) {
if (ary[i] > ary[j]) { // 将小的数往前移,第一轮将最小的移到到第一个位置,然后继续第二轮比较
int temp = ary[i];
ary[i] = ary[j];
ary[j] = temp;
}
count++;// 计算运算了多少次!
}
}
System.out.println(count);
return ary; } // 二: 插入排序
// 第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素
// 在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置 public static int[] insertSort(int[] ary) {
int count = 0;
for (int i = 1; i < ary.length; i++) {
int temp = ary[i];
int j;
for (j = i - 1; j >= 0; j--) {
if (temp < ary[j]) {
ary[j + 1] = ary[j];// 移动 ary[j]->ary[j+1];留出下标j的位置让temp插入
count++;
} else {
count++;
break;
} }
ary[j + 1] = temp;// 插入 temp -> ary[j+1]是因为for循环中j--,所以跳出循环时j的值是j-1
// 就应该把temp的值赋给ary[j+1]
}
System.out.println(count); // 计算运算次数
return ary; } // 三: 冒泡排序
// 原理: a 逐一比较数组中相邻的两个元素, 如果后面
// 的数字小于前面的数字, 就交换先后元素.
// b 经过一个轮次的比较, 一定有一个最大的排
// 在最后的位置.
// c 每次比较剩下的元素, 经过n-1次比较, 可以
// 实现排序
// 简单说: 比较交换相邻元素,每次最大的漂移到最后 public static int[] bubbleSort(int[] ary) {
int count = 0;
for (int i = 0; i < ary.length - 1; i++) {
boolean tap = false;
for (int j = 0; j < ary.length - i - 1; j++) {
if (ary[j] > ary[j + 1]) {// 相邻两数进行比较,大的就移动到后面去!
int temp = ary[j];
ary[j] = ary[j + 1];
ary[j + 1] = temp;
tap = true;
}
count++;// 计算运算了多少次!
// System.out.println(Arrays.toString(ary));
}
if (!tap) {
break;// 如果j 与 j+1没有交换,跳出循环!
}
}
System.out.println(count);
return ary; }
}