一、选择排序
选择一个元素,依次与后面的元素相比较。
如上图所示,arr[0]分别和数组的arr[0+1]、arr[0+2],直至最后一个元素做比较,完成第一个循环;arr[1]分别和数组的第arr[1+1]、arr[1+2],直至最后一个元素做比较....
写程序的思路,可以先写第一层循环,再从第一层循环中提取出总结性的部分,放在上一层循环中。
上一层循环使用for(x=0;x<arr.length-1;x++),用于确定是哪个元素在和后面的元素比较;
里面的循环使用for(int i=x+1;i<arr.length;i++),用于确定是哪个元素是后面被比较的元素的起点;
循环内部使用arr[x]和arr[i]作比较。
内存循环是用来控制该轮循环中被比较的元素的。
代码:
public static void sort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int i = 1+x;i<arr.length;i++)
{
if(arr[x]>arr[i])
{
int temp = arr[x];
arr[x]=arr[i];
arr[i]=temp;
}
}
}
}
二、冒泡排序
如上图所示,冒泡排序就是将相邻的2个元素进行比较。如果是从小到大排序,那么第一轮比较结束后,最大的元素被冒泡到最后;第二轮比较结束后,第二大的元素被冒泡到倒数第二个位置;如果是从大到小排序,那么最小的元素在第一轮比较结束后会被放到最后,以此类推。注意,不管是正序,还是倒叙,第一轮都是将最大/最小值放到最后的!
方法同上选择排序,第一轮排序,比较次数为arr.length-1次,第二轮为arr.length-2,以此类推。因此外层循环为for(int x =0;x<arr.length-1;x++) ;
内层循环为for(int i=0;i<arr.length-1-x;i++) ,循环内部交换元素即可。
内存循环是用于控制每一轮的比较次数的。
代码:
static void sort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int i=0;i<arr.length-1-x;i++)
{
if(arr[i]>arr[i+1])
{
int temp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}