选择排序:
可以将排序时数组元素分为有序区和无序区 有序区是我们排好序的部分,当然起初都是无序区。
选择排序是将无序区第一个元素与无序区其他元素依次比较,如果无序区第一个元素大于所比较的其他元素,则交换两者的数据。当遍历完成时,无序区第一个元素就排序完成了,此元素就划分到有序区,这是第一轮。
有n个元素需要进行n-1轮,每一轮需要进行n-1-(有序元素个数) ----------这句可以不要看-----
public static void selectSort(int[] arr)
{
for(int x = 0;x<arr.length-1;x++) //从第一个元素开始,共进行arr.length-1轮,就是外层循环。
{
for(int y = x+1;y<arr.length;y++) //内层循环比较是第一个无序元素从比较第二个无序元素开始
{
if(arr[x]>arr[y]) //如果第一个无序元素比所比元素大时,交换元素。
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
冒泡排序:
第一个与第二个元素比较,前面的元素大于后面的元素的话就两者交换;然后第二个元素与第三个元素比较,前面的元素大于后面的元素的话就两者交换;。。。第arr.length-1个元素(下标为arr.length-2)与最后一个元素比较,前面的元素大于后面的元素的话就两者交换。
遍历完一遍后,最后一个元素就是最大的元素,如其名,冒泡就是将最大的元素或最小的元素浮上来。那么第一轮后有一个有序的元素,第二轮有两个。。。
public static void bubbleSort(int[] arr)
{
for(int x = 0;x<arr.length-1;x++) //每一轮遍历可以确定一个有序元素,所以外层循环需要arr.length-1轮
{
for(int y = 0;y<arr.length-1-x;y++) //一轮遍历需要无序元素之间进行两两比较
{
if(arr[y] > arr[y+1]) //如果前面元素大于后面的元素就交换两者的数据
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}