1冒泡排序
public class BubbleSort
{
public static void main(String[] args)
{
int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 }; //定义一个数组,里面的数字是无序的
bubbleSort(arr);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
// 冒泡排序 思路:
// 1.比较几轮(外围循环次数)
// 2.每轮比较几次
// 3.谁和谁比
//1.每一次比较确定一个数 所以要比较(arr.length - 1)次 (2个数比一次就可以确定顺序)
//2 由于一轮比较下来确定右边元素最大 ,所有下次比较则少一次
//3 每轮比较都是从1和2比开始,然后2和3比,3和4比 ... (都是从第一个数开始比较).开始比较的下标是0
//4 比较多少轮,最右边就有几个数已经排好序
public static void bubbleSort(int arr[])
{
for (int x = 0; x < arr.length - 1; x++)//比较轮数
{
for (int y = 0; y < arr.length - 1 - x; y++)//每轮比较次数
{
if (arr[y] > arr[y + 1])//满足条件交换
{
int temp = arr[y + 1];
arr[y + 1] = arr[y];
arr[y] = temp;
}
}
}
}
//一样道理 不同写法如下
public static void bubbleSort(int[] arr)
{
for (int x = arr.length - 1; x >0; x--)
{
for (int y = 0; y < x; y++)
{
if(arr[y]>arr[y+1])
{
int temp = arr[y+1];
arr[y+1] = arr[y];
arr[y] = temp;
}
}
}
}
}
2.选择排序
public class SelectSort
{
public static void main(String[] args)
{
int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 };
selectSort(arr);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
// 选择排序
//比较几轮
//每轮比较几次
//谁和谁比
<pre name="code" class="java"> //1.每一次比较确定一个数 所以要比较(arr.length - 1)次 (2个数比一次就可以确定顺序)
//比较次数递减 ,每次比较可以确定左边那个值最小
//比较方式,开始是1和2比,然后1和3,然后1和4,以此类推.也就是拿第一个元素和所有元素分别比较一次,小的放在第一位,一轮下来 ,确定最小值
//第二轮 2和3比,2和4比,2和5比 .... 2个之中比较的那个放在第二位 ,可以确定这个值是第二小.
//接下来 以此类推
//每一轮来说 开始比较的那个数下标每轮加1,想到下面的x变量没有。
//外圈里面的x变量刚刚好是循环一次加1 我们就arr.length - x来确定每轮比多少次
public static void selectSort(int[] arr)
{
for (int x = 0; x < arr.length -1; x++)//比较多少轮
{
for (int y = x+1; y < arr.length - x; y++)//int y = x+1 ,每次比较完一轮,开始坐标+1,刚刚好符号x特点
{
if(arr[x]>arr[y])
{
int temp = arr[y];
arr[y] = arr[x];
arr[x] = temp;
}
}
}
}
// 一样的原理。循环比较方向不同
public static void selectSort(int[] arr)
{
for (int x = arr.length - 1; x >0 ; x--)//比较几轮
{
for (int y = x-1; y>=0; y--)
{
if(arr[x]>arr[y])
{
int temp = arr[y];
arr[y] = arr[x];
arr[x] = temp;
}
}
}
}
}
3 插入排序
public class InsertSort
{
public static void main(String[] args)
{
int[] arr = { 44, 33, 11, 22, 88, 55, 77, 66 };
insertSort(arr);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
// 插入排序
// 循环几轮
// 每次循环几次
// 谁和谁比
// 我们假定左边第一个是最小的数 ,so 它可以看作是有序的, 就比如任何2个不等元素都可以看作有序的
// 一轮确定一个数 是 arr.length-1
// 不确定,分情况,我们想下,我们如果把一个数字插入一个有序数列中,首先和右边最大比,大就不同换了,否则和第二大的那个比,同理大就不用换
// 插入排序一个很重要的道理就是 大就不往下比了
// 其实就好象一个数和一个有序数列的里面的数字比 找到自己的位置
public static void insertSort(int[] arr)
{
for (int x = 0; x < arr.length - 1; x++)//循环次数
{
for (int y = x; y >=0; y--)//X递增的 ,刚刚好适合我们Y坐标起始。
{
if (arr[y] > arr[y + 1]) //前面比后面的大,换
{
int temp = arr[y + 1];
arr[y + 1] = arr[y];
arr[y] = temp;
}
else//后面比前面大 ,前面又是有序的,不换
{
break;
}
}
}
}
}