2014-02-14 198 views
0

鉴于算法冒泡排序:冒泡排序使用冒泡

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个位置上的最小元素第i个通过名单。

任何人都可以帮助我吗?

+0

需要注意的是,你的要求,第一遍会带来最小的元素到第一位置。所以通行证是“泡沫下来”,不起来。 –

回答

0

目前您从头开始遍历数组,因此如果您遇到最大的元素,它会“冒泡”到数组的末尾。如果您想做相反的事情,那么将“最小的元素向下冒泡”开始,您需要以相反的方向遍历数组,从结尾到开始。希望它能帮助你找到方法。

1
#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]); 
    } 
} 
0

看起来这个答案还没有被接受。因此试图检查这是否仍然是一个问题。

这是我认为可以在Java中的一个可能的实现。正如@Warlord提到的那样,该算法是为了确保排序所关注的数组被想象为一个垂直数组。每次传球时,我们所做的只是检查下面是否有更大的元素,以及是否发现该元素冒泡到顶部。

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] + " "); 
    } 
} 

从主的呼吁:

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); 
}