public class  test1{
public static void main(String args[])
{
int min;
int temp;
 int [] array={3,4,2,5,7,6};       
   for(int k=1;k<array.length;k++) 
     { 
      for(int j=1;j<array.length-1-k;j++)          
         if (array[j]<array[j-1])
                   {                           
               temp=array[j];array[j]=array[j-1];array[j-1]=temp; }
}
                       for(int m=0;m<array.length;m++)
                            {System.out.println("排序后的数组:"+array[m]);}
}
}
这段自己编的程序运行结果和没排序一样不知道错哪里了。

解决方案 »

  1.   

    k开始为什么不是0呢? for (k = 0; ... ...
      

  2.   

    public class test1 {
    public static void main(String args[]) {
    int temp;
    int[] array = { 3, 4, 2, 5, 7, 6 };
    for (int k = 1; k < array.length; k++) {
    for (int j = 1; j < array.length + 1 - k; j++)
    if (array[j] < array[j - 1]) {
    temp = array[j];
    array[j] = array[j - 1];
    array[j - 1] = temp;
    }
    }
    for (int m = 0; m < array.length; m++) {
    System.out.println("排序后的数组:" + array[m]);
    }
    }
    }
    冒泡排序。
      

  3.   

    代码中不能改颜色,我不知道。for (int j = 1; j < array.length + 1 - k; j++)
    把"-1"改成"+1"。
      

  4.   

    for(int j=1;j<array.length-1-k;j++) 错了int min;
    int temp;
    int[] array = { 3, 4, 2, 5, 7, 6 ,10,1};
    for (int k = 1; k < array.length; k++) {
    for (int j = 1; j < array.length - k +1; j++)
    if (array[j] < array[j - 1]) {
    temp = array[j];
    array[j] = array[j - 1];
    array[j - 1] = temp;
    }
    }
    for (int m = 0; m < array.length; m++) {
    System.out.println("asd" + array[m]);
    }
      

  5.   

    public class test1 {
    public static void main(String args[]) {
    int temp;
    int[] array = { 3, 4, 2, 5, 7, 6 };
    for (int k = 0; k < array.length; k++) {
    int min=k;
    for (int j = k+1; j < array.length; j++)
    if (array[j] < array[min]) min=j;
    temp=array[min];
    array[min]=array[k];
    array[k]=temp;
    }
    System.out.println("排序后的数组:");
    for (int m = 0; m < array.length; m++) {
    System.out.print(array[m]+" ");
    }
    }
    }
    选择排序。
      

  6.   

    for(int j=1;j<array.length-1-k;j++)   这一段里把j<array.length-1-k改为j<array.length-k
    试一试
      

  7.   

    public class Test1{

    public static void main(String args[])
    {
        int min;
        int temp;
        int [] array = {3,4,2,5,7,6};   
        for(int k = 0; k < array.length; k++)  
        {  
         for(int j = k; j < array.length; j++)   
         if (array[j] < array[k])
         {   
         temp = array[k];
         array[k] = array[j];
         array[j] = temp;
         }
        }
        for(int m = 0; m < array.length; m++)
        {
         System.out.println("排序后的数组:"+array[m]);
        }
    }
    }
      

  8.   

    楼主的逻辑有问题
    下边这些是我写的 楼主看看
    public static void bubbleSort(int... arr) {
    int temp;
    for (int i = 0; i < arr.length - 1; i++) {
    temp = 0;
    for (int j = arr.length - 1; j > i; j--) {
    if (arr[j] < arr[j - 1]) {
    arr[j] ^= arr[j - 1];
    arr[j - 1] ^= arr[j];
    arr[j] ^= arr[j - 1];
    temp++;
    }
    }
    if (temp == 0) {
    break;
    }
    }
    } public static void selectSort(int... arr) {
    int temp;
    for (int i = 0; i < arr.length - 1; i++) {
    temp = i;
    for (int j = i + 1; j < arr.length; j++) {
    if (arr[j] < arr[temp]) {
    temp = j;
    }
    }
    if (temp == i)
    continue;
    arr[i] ^= arr[temp];
    arr[temp] ^= arr[i];
    arr[i] ^= arr[temp];
    }
    } public static void quickSort(int[] arr) {
    innerQuickSort(arr, 0, arr.length - 1);
    } private static void innerQuickSort(int[] arr, int head, int end) {
    if (head >= end) {
    return;
    }
    int index = head;
    int temp = 0;
    for (int i = head; i < end; i++) {
    if (arr[i] <= arr[end]) {
    temp = arr[index];
    arr[index] = arr[i];
    arr[i] = temp;
    index++;
    }
    }
    temp = arr[index];
    arr[index] = arr[end];
    arr[end] = temp;
    innerQuickSort(arr, head, index - 1);
    innerQuickSort(arr, index + 1, end);
    } public static void insertSort(int... arr) {
    int index, temp;
    for (int i = 1; i < arr.length; i++) {
    index = i;
    temp = arr[i];
    while (index-- > 0 && arr[index] > temp)
    ;
    for (int j = i; j > index + 1; j--) {
    arr[j] = arr[j - 1];
    }
    arr[index + 1] = temp;
    }
    } public static void mergeSort(int... arr) {
    int[] rep = new int[arr.length];
    int[] temp;
    int inc = 1;
    int index = 0;
    int first = 0;
    int second = 0;
    int times = 0;
    while (inc < arr.length) {
    index = 0;
    for (int i = 0; i < arr.length; i += inc * 2) {
    first = i;
    second = i + inc;
    while (first < i + inc && first < arr.length
    && second < i + inc * 2 && second < arr.length) {
    if (arr[first] <= arr[second]) {
    rep[index++] = arr[first++];
    } else {
    rep[index++] = arr[second++];
    }
    }
    while (first < i + inc && first < arr.length) {
    rep[index++] = arr[first++];
    }
    while (second < i + inc * 2 && second < arr.length) {
    rep[index++] = arr[second++];
    }
    }
    inc *= 2;
    times++;
    temp = arr;
    arr = rep;
    rep = temp;
    }
    if (times % 2 == 1) {
    temp = arr;
    arr = rep;
    for (int i = 0; i < temp.length; i++) {
    arr[i] = temp[i];
    }
    }
    }
    // 堆排序
    public static void heapSort(int[] arr) {
    for (int i = arr.length / 2; i >= 0; i--) {
    maxHeap(arr, i, arr.length);
    }
    for (int i = arr.length - 1; i >= 1; i--) {
    arr[0] ^= arr[i];
    arr[i] ^= arr[0];
    arr[0] ^= arr[i];
    maxHeap(arr, 0, i);
    }
    } // 建最大堆
    private static void maxHeap(int[] arr, int index, int end) {
    int q;
    while (index < end) {
    q = 2 * index + 1;
    if (q >= end)
    break;
    if ((q < end - 1 && (arr[q + 1] > arr[q])))
    q = q + 1;
    // 如果某一节点的值大于其子节点的最小值,将其交换
    if (arr[q] > arr[index]) {
    arr[q] ^= arr[index];
    arr[index] ^= arr[q];
    arr[q] ^= arr[index];
    index = q;
    } else {
    break;
    }
    }
    }
      

  9.   

    内层循环每次都找出最小值,替换到外层循环的角标值。内层循环设置j=k,避免重复比较。比如当K=3时候,array[0],array[1],array[2]已经是按小到大排好的3个最小值了。所以内层循环就只需要比较array[4]与后边的值。
      

  10.   

    楼主的外围循环次数错了
    内部也少了一次
    改成下边这样就可以了 
    public static void main(String[] args) {
    int min;
    int temp;
    int[] array = { 3, 4, 2, 5, 7, 6 };
    for (int k = 0; k < array.length; k++) {
    for (int j = 1; j < array.length - k; j++)
    if (array[j] < array[j - 1]) {
    temp = array[j];
    array[j] = array[j - 1];
    array[j - 1] = temp;
    }
    }
    for (int m = 0; m < array.length; m++) {
    System.out.println("排序后的数组:" + array[m]);
    } }
      

  11.   

     //从大到小的冒泡
    public static void main(String args[]) {
            int[] myArray = { 3, 4, 2, 5, 7, 6 };
            //取长度最长的词组 -- 冒泡法
            for (int j = 1; j < myArray.length;j++)
            {
                for (int i = 0; i < myArray.length - 1; i++)
                {
                     // 如果 myArray[i] < myArray[i+1] ,则 myArray[i] 下沉一位
                    if (myArray[i] < myArray[i + 1])
                    {
                        int tempf = myArray[i];
                        myArray[i] = myArray[i + 1];
                        myArray[i + 1] = tempf;
                    }
                }
            }
            for (int m = 0; m < myArray.length; m++)
            {
               System.err.println(myArray[m]);
            }    }