public void sort(int[] arr) {
int tmp;
for(int i = 1; i < arr.length; i++) {
// 待插入数据
tmp = arr[i];
int j;
for(j = i - 1; j >= 0; j--) {
// 判断是否大于tmp,大于则后移一位
if(arr[j] > tmp) {
arr[j+1] = arr[j];
}else{
break;
}
}
arr[j+1] = tmp;
System.out.println(i + ":" + Arrays.toString(arr));
}
}
为什么是arr[j+1] =tmp,而不是arr[j] = tmp?
int tmp;
for(int i = 1; i < arr.length; i++) {
// 待插入数据
tmp = arr[i];
int j;
for(j = i - 1; j >= 0; j--) {
// 判断是否大于tmp,大于则后移一位
if(arr[j] > tmp) {
arr[j+1] = arr[j];
}else{
break;
}
}
arr[j+1] = tmp;
System.out.println(i + ":" + Arrays.toString(arr));
}
}
为什么是arr[j+1] =tmp,而不是arr[j] = tmp?
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
}
{
int change = 0;
for(int i = 1; i < numbers.length; i++)
{
boolean flag = true;
for(int j = 1; j <= numbers.length - i; j++)
{
if(numbers[j-1] > numbers[j])
{
change = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = change;
flag = false;
}
}
if(flag)
{
break;
}
}
}
flag = false;
}
}
if(flag)
{
break;
}
}
}[/code]
增加flag标记,就是说某次循环扫描到已经有序了,就不会再做下次扫描了,直接结束我那个是插入排序,不好意思打错了
增加flag标记,就是说某次循环扫描到已经有序了,就不会再做下次扫描了,直接结束
//冒泡排序 这样写不是更好。
/*
int arr[]={20,29,3923,349};
for(int i=0; i<arr.length-1; i++){
for(int j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){ //如果前面的这个数大于后面的这个数
int demo=arr[j]; //先把前面这个赋值给临时变量
arr[j]=arr[j+1]; //把后面这个赋值给前面
arr[j+1]=demo; //再把前面的这个数赋值给
}
}
}
for(int i:arr){
System.out.println(i);
}