package cc.test;
/**
* Demo描述:
* 选择排序和冒泡排序
*/
public class TestSort {
public static void main(String[] args) {
TestSort testSort=new TestSort();
int intArray []=new int []{11,3,-2,4,8,7};
testSort.selectSort(intArray);
testSort.bubbleSort(intArray);
}
//选择排序
//取出第一个元素依次与其后的每个元素比较,若大于则交换位置
//在第一次排序完成后第一个元素存放的就是数组中的最小值
//继续第二次排序,依次类推.....
//但已经排过序的元素不需要再次参加排序
//即代码:int j = i+1
public void selectSort(int [] intArray){
int temp;
for (int i = 0; i < intArray.length; i++) {
for (int j = i+1; j < intArray.length; j++) {
if (intArray[i]>intArray[j]) {
temp=intArray[j];
intArray[j]=intArray[i];
intArray[i]=temp;
}
}
}
System.out.println("选择排序结果如下:");
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i]+" ");
}
System.out.println("");
}
//冒泡排序
//两个相邻的元素比较,一轮后一个最大值排在了数组最后面
//继续上面操作,只是在上一轮中已排出的最大元素不再参加排序
//备注说明:
//1 外层for循环控制的是比较的轮数.
// 注意:轮数总比数组长度小1.因为最后一轮就剩下一个元素没有排序的必要了
// 因为此时第一个元素已经是最小值
// 即代码:i < intArray.length-1
//2 内存for循环控制每一轮的比较
// 注意:要防止下标越界而且在以往轮中已经排序出来的值就不要再次参加排序
// 即代码:j < intArray.length-1-i
public void bubbleSort(int[] intArray) {
int temp;
for (int i = 0; i < intArray.length-1; i++) {
for (int j = 0; j < intArray.length-1-i;j++) {
if (intArray[j] > intArray[j + 1]) {
temp = intArray[j + 1];
intArray[j + 1] = intArray[j];
intArray[j] = temp;
}
}
}
System.out.println("冒泡排序结果如下:");
for (int i = 0; i < intArray.length; i++) {
System.out.print(intArray[i]+" ");
}
}
}