简体   繁体   English

使用Bubble Up进行冒泡排序

[英]Bubble Sort using Bubble Up

Given the algorithm for Bubble Sort: 给定冒泡排序的算法:

Algorithm BubbleSort(A[0...n]):
  for i <- 0 to n-2 do
    for j <- 0 to n-2-i do
      if(A[j+1] < A[j] then swap(A[j], A[j+1]))

I have to rewrite the Bubble Sort algorithm using where we "Bubble Up" the smallest element to the ith position on the ith pass through the list. 我必须使用我们将最小元素“冒泡”到列表中第ith个位置的第i个位置来重写Bubble Sort算法。

Can anyone help me with this? 谁能帮我这个?

#include<stdio.h>
void bubbleSort(int *x,int size)
{
  int e,f,m,g;
  m=size-2;
  while(m>0)
  {
    e=0;
    f=1;
    while(e<=m)
    {
      if(x[f]<x[e])  
      {
        g=x[e];       //swaping
        x[e]=x[f];
        x[f]=g;
      }
    e++;
    f++;   
    }
   m--; 
  } 
}
void main()
{
  int x[10],y;
  for(y=0;y<=9;y++)      //loop to insert 10 numbers into an array
  {
    printf("Enter a number: ");
    scanf("%d",&x[y]);
  }
  bubbleSort(x,10);      //pass number entered by user and size of array to bubbleSort 
  for(y=0;y<=9;y++)     //loop to print sorted numbers
  {
    printf("%d\n",x[y]);
  }
}

Currently you are traversing the array from the start, therefore if you come upon the largest element, it will be "Bubbled up" to the end of the array. 当前,您是从头开始遍历数组,因此,如果遇到最大的元素,它将“冒泡”到数组的末尾。 If you want to do the opposite, "Bubbling down" the smallest element to the start, you need to traverse the array in the opposite direction, from the end to the start. 如果要进行相反的操作,即将最小的元素“冒泡”到起点,则需要从终点到起点以相反的方向遍历数组。 Hope it helps you to find the way. 希望它能帮助您找到方法。

Looks like the answer to this has not been accepted yet. 看来答案还没有被接受。 Hence trying to check if this is still an issue. 因此,尝试检查这是否仍然是一个问题。

Here is what I think can be a possible implementation in Java. 我认为这可能是Java中可能的实现。 As @Warlord mentioned, the algorithm is to ensure that the array in concern for sorting is imagined as a vertical array. 正如@Warlord所提到的,该算法是要确保将要排序的数组想象为一个垂直数组。 With each pass, all we are doing is check if there is a larger element below and if found that element is bubbled up to the top. 每次通过时,我们要做的就是检查下面是否有较大的元素,以及是否发现该元素冒泡到顶部。

    static void bubbleUpSort(int[] arr){
    final int N = arr.length;
    int tmp = 0;
    for (int i=0; i < N; i++){
        for (int j=N-1; j >= i+1; j--){
            if (arr[j] < arr[j-1]){
                tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
        }
    }

    for (int k =0; k < arr.length; k++){
        System.out.print(arr[k] + " ");
    }
}

Called from main as: 从main调用为:

public static void main(String[] args) {
    System.out.println("Bubble Up Sort");
    int[] bUp = {19, 2, 9, 4, 7, 12, 13, 3, 6};
    bubbleUpSort(bUp);
}

Bubble Sort 气泡排序

Comparing each with the neighbor and swapping if first is greater than the next 将每个与邻居进行比较,如果第一个大于下一个,则交换

function bubbleSort(arr){
  let temp;
  console.log("Input Array");
  console.log(arr);
  for (let i = 0; i < arr.length-1; i++) {
    for (let j = 0; j < arr.length-i-1; j++) {
      if (arr[j] > arr[j+1]) {
        temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
        console.log(arr[j],"swapped with",arr[j+1])
        console.log(arr);
      } else {
        console.log("SKIP");
      }
    }
  }
  console.log("Sorted using Bubble Sort");
  return arr;
}
console.log(bubbleSort([7,6,9,8,2,1,4,3,5]));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM