排序的介绍
排序是将一组数据依指定顺序进行排列的过程
排序的分类
1,内部排序
将需要处理的所有数据加载到内部储存器中进行排序 包括(交换式排序法,选择式排序法和插入式排序法)
2,外部排序
数据量过大无法加载到内存中,需要借助外部储存器进行排序,包括(合并排序法和直接排序合并法)
基本思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移至后部
基础练习 用冒泡排序 完成数组 int arr[] = {30,50,20,90,15,}
public class Array02{
public static void main(String[] args) {
int temp = 0;//定义一个temp作为临时变量
int arr[] = {30,50,20,90,15};
for (int i = 0;i<4 ;i++ ) {//执行4次比较
if (arr[i]>arr[i+1]) { //满足条件 前面数大于后面数的时候
temp = arr[i];// 把前面的数赋给temp
arr[i] = arr[i+1];//把后面数给到前面位置
arr[i+1] = temp;//保存在temp里较大的数再赋给后面那个数实现交换位置
}
}
System.out.println("========第一轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
for (int i = 0;i<3 ;i++ ) {//执行3次比较
if (arr[i]>arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("\n========第二轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
for (int i = 0;i<2 ;i++ ) {//执行3次比较
if (arr[i]>arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("\n========第三轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
for (int i = 0;i<2 ;i++ ) {//执行2次比较
if (arr[i]>arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("\n========第四轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
for (int i = 0;i<1 ;i++ ) {//执行1次比较
if (arr[i]>arr[i+1]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("\n========第五轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
}
}
也可以用双层for循环来简化
public class Array02{
public static void main(String[] args) {
int temp = 0;//定义一个temp作为临时变量
int arr[] = {30,50,20,90,15};
for (int j = 0;j<4 ;j++ ) {
for (int i = 0;i<4-j ;i++ ) {
if (arr[i]>arr[i+1]) { //满足条件 前面数大于后面数的时候
temp = arr[i];// 把前面的数赋给temp
arr[i] = arr[i+1];//把后面数给到前面位置
arr[i+1] = temp;//保存在temp里较大的数再赋给后面那个数实现交换位置
}
}
System.out.println("\n========第"+(j+1)+"轮==========");
for (int i = 0;i<arr.length;i++ ) {
System.out.print(arr[i]+"\t");
}
}
}
}
先死后活 外层循环的4 刚好等于arr.length-1 可以替代进去
for (int j = 0;j<arr.length-1 ;j++ ) {
for (int i = 0;i<arr.length-1-j ;i++ ) {
如果再某一轮发现一次都没有交换说明已经是有序的 可以使用break提前终止