冒泡排序法

/**
 * 功能:冒泡排序法
 *
思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,
 *
,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标)
 * 较小的单元,,就像水底下的气泡一样逐渐向上冒。
 * 作者:徐守威
 */
package com.xushouwei;

冒泡排序,冒泡排序法

for(int k=0;k<N;k++) {
  for(int j=k+1;j<N;j++){
    if(a[k]>a[j]){
      int t = a[k];
      a[k] = a[j];
      a[j] = t;
    }
  }
}

当k=N-1时,内部程序循环了0次,说明未走到内部的数值交换处理中,下面代码【带实例】中的方法解决了此问题,个人比较喜欢用下面这种。

#include<stdio.h>
int main(){
int data[10]={-100, 79, -3, 0, 49, 21, 8, 200, 12341, 0};
printf(“数组原序为:”);
for(int i=0;i<10;i++){
printf(“%5d”,data[i]);
}
printf(“\n\n冒泡升序为:”);
for(int i=0;i<10-1;i++){
for(int j=0;j<10-1-i;j++){
if(data[j]>data[j+1]){
int temp = data[j];
澳门威斯尼人平台登录,data[j] = data[j+1];
data[j+1] = temp;
}
}
}
for(int i=0;i<10;i++){
printf(“%5d”,data[i]);
}
}

for(int k=0;kN;k++) {
for(int j=k+1;jN;j++){ if(a[k]a[j]){ int t = a[k]; a[k] =
a[j]; a[j] = t; } } } 当k=N-1时,内部程序循环了0次,说明未…

冒泡排序,冒泡排序法

public class BubbleSort{


    public static void sort(int[] arr) {
        int temp;
        boolean flag = true;//排序的优化,当循环不在赋值时就会停止循环
        for (int i = 0; i < arr.length -1 && flag; i++) {
            flag = false;
            // 每一次由底至上地上升
            for (int j = arr.length - 1; j > i; j--) {

                if (arr[j] < arr[j - 1]) {
                    temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                    flag = true;
                }
            }
        }
    }


  public static void print(int[] arr) {
        for (int i : arr) {
            System.out.print(i + " ");
        }
        System.out.println();
    }


    public static void main(String[] args) {
        int arr[] = { 43, 37, 64, 90, 76, 11, 29, 43 };
        sort(arr);
        print(arr);
    }
}

public class BubbleSort{
public static void sort ( int[] arr) { int temp; boolean flag = true;
//排序的优化,当循环不在赋值时就会停止…

利用两层循环实现数组里的数值大小顺序排列

#include<stdio.h>
void main()
{
int a[10];   //定义一个数组既它的元素为10
int i,j,temp;     //定义3个变量
printf("输入10个整数:\n\a");
for(i=0;i<10;i++)
   scanf("%d",&a[i]); //依次输入10个整数
for(i=0;i<9;i++)      //进行9轮排序
{
   for(j=0;j<9-i;j++) //每轮进行9-i次交换
   if(a[j]>a[j+1])  //(>升序,<降序)
   {
      temp=a[j];
      a[j]=a[j+1];   //大的沉底,小的上浮
      a[j+1]=temp;
   }
}
printf("排序结果:");
for(i=0;i<10;i++)   //依次输出排序结果
   printf("%d\t  ",a[i]);
}
/*
冒泡排序(假设升序):外层循环的循环次数和:就是求每一次最大值的次数之和(把每一次求最大值当作一次次数);
          内层循环的循环次数和:就是在每一次求最大值中两两进行比较大小的次数和
eg:假设求6个数进行升序排大小
           外层循环的循环次数   内层循环的循环次数
              (共6-1次)             
求最大值:       第一次:          5次          
                第二次:          4
                第三次:          3
                第四次:          2
                第五次:          1
*/

public class T4 {

第一层循环:控制受比较的数值

 

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int arr1[]={1,6,0,-1,9,-100,90};
  //开始排序,创建一个Bubble类
  Bubble bubble=new Bubble();
  bubble.sort(arr1);
  
  //输出最后结果
  for(int i=0;i<arr1.length;i++)
  {
   System.out.print(arr1[i]+” “);
  }
  
 }

第二层循环:控制受比较的数值与其他数值比较的次数

}
//定义一个Bubble类
class Bubble
{
 //排序方法
 public void sort(int arr[])
 {
  //第一层循环用来指定排序的次数
  //定义一个临时变量来存放交换的值
  int temp=0;
  for(int i=0;i<arr.length-1;i++)
  {
   //内层循环开始逐一比较,如果我们发现前一个数比后一个数大,这交换
   for(int j=0;j<arr.length-1-i;j++)
   {
    //进行前后比较
    if(arr[j]>arr[j+1])
    {
     //交换位置
     temp=arr[j];
     arr[j]=arr[j+1];
     arr[j+1]=temp;
    }
   }
  }
 }
}

实现思路:   

int sco[] = { 3, 2, 1, 4, 5 };
        for (int i = 0; i < sco.length; i++) {
            for (int j = i; j < sco.length; j++) {
                if (sco[i] > sco[j]) {
                    int tymp = sco[j];
                    sco[j] = sco[i];
                    sco[i] = tymp;
                }
            }
            System.out.println(sco[i]);
        }

发表评论

电子邮件地址不会被公开。 必填项已用*标注