了解了插入排序,一般插入排序是这样的
class Array1
{
public static void main(String[] args)
{
int [] a = {9,6,7,4,3,8,5,2,1};
list(a);
selectSort(a);
list(a);
}
public static void selectSort(int [] arr) {
for (int x=0;x<arr.length ;x++ ) {
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;
}
}
}
}
public static void list(int [] arr) {
for (int x=0;x<arr.length ;x++ ) {
System.out.print(arr[x]+"\t");
}
System.out.println();
}
}
}
这样虽然比较简单,但是效率不是很高,如果y的值比x值小就交换一次,如果后面还有比x小的,还需要交换,这样效率不高。可以先比较内层循环最小的值是哪一个,再跟最小的交换就可以了。
class Array1 {
public static void main(String[] args) {
int [] a = {9,6,7,4,3,8,5,2,1};
print(a);
selectSort(a);
print(a);
}
public static void selectSort(int [] arr) {
int i , temp; //现在这里定义出来两个变量,否则定义在里面每循环一次都会重新创建变量
for (int x=0;x<arr.length ;x++ ) { //外层循环
i=x; //让这个用于比较的变量i等于x
for (int y=x+1;y<arr.length;y++ ) { //内层循环
if (arr[y]<arr[i]) { //在内层循环中,如果发现有比数组角标i小的数就让角标i等于它
i=y;
}
}
if (i!=x) { //这里出来,如果i值发生改变,说明找到了比x小的值
temp = arr[x]; //替换操作
arr[x] = arr[i];
arr[i] = temp;
}
}
}
public static void print(int [] arr) { //遍历数组
for (int x=0;x<arr.length ;x++ ) {
System.out.print(arr[x]+"\t");
}
System.out.println();
}
}