鉴于算法冒泡排序:冒泡排序使用冒泡
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个通过名单。
任何人都可以帮助我吗?
鉴于算法冒泡排序:冒泡排序使用冒泡
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个通过名单。
任何人都可以帮助我吗?
目前您从头开始遍历数组,因此如果您遇到最大的元素,它会“冒泡”到数组的末尾。如果您想做相反的事情,那么将“最小的元素向下冒泡”开始,您需要以相反的方向遍历数组,从结尾到开始。希望它能帮助你找到方法。
#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]);
}
}
看起来这个答案还没有被接受。因此试图检查这是否仍然是一个问题。
这是我认为可以在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);
}
需要注意的是,你的要求,第一遍会带来最小的元素到第一位置。所以通行证是“泡沫下来”,不起来。 –