C中的冒泡排序算法

我试图完成的程序是一个使用冒泡排序算法的程序。我不确定问题是什么或问题在哪个函数中。问题是程序没有正确排序数组。(它也必须按升序排列)。

这是代码:

#include  #include "simpio.h" void getArray (int arr[], int size); void sortArray (int arr[], int size); void swap (int arr[], int num, int number); void dispArray (int arr[], int size); bool checkBigger (int arr[], int num, int number); main() { int size; printf("Enter number of elements: "); size=GetInteger(); int arr[size]; getArray(arr, size); sortArray(arr, size); dispArray(arr, size); getchar(); } void getArray (int arr[], int size) { int num; printf("Please enter the value of the elements: \n"); for(num=0; num<size; num++) { arr[num]=GetInteger(); } } void sortArray (int arr[], int size) { int num, number, d; for(num=0;num<size-1;num++) { for(d=0; d<size-num-1; d++) { number=num+1; checkBigger(arr, num, number); } } } void swap (int arr[], int num, int number) { int tem; tem=arr[num]; arr[num]=arr[number]; arr[number]=tem; } void dispArray (int arr[], int size) { int num; printf("The sorted list is:\n"); for(num=0; numarr[number]) { swap(arr, num, number); } } 

非常感谢你。

 void sortArray (int arr[], int size) { int num, number, d; for(num=0;num 

非常确定您的问题与您的算法有关,尝试用笔和纸模拟您的算法。 它将帮助您更好地理解您的代码和算法:)

为了您的方便,我在前面做了一个泡泡排序算法

 void bubbleSort( int a[], int n) { int i,j,temp; // for a={1,2,3,4,5} n is 5 n = n - 1; // bcz otherwise it will get out of index for(i=0; ia[j+1]) { temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; } } } } 

我希望这有帮助

我从上面的例子中得到的只是交换排序的一个实现。

外循环上的交换排序检查表中的每个条目与第一个元素,必要时进行交换。 在内环的末尾,最低元素位于位置1,然后它从位置2开始,将其与剩余元素进行比较,并进行交换。 即使arrays已经按顺序排列,排序也无法停止。 它必须进行*(n-1)比较。 已经排序的50个元素的数组将进行50 * 49比较。

冒泡排序的工作方式不同

将交换标志设置为零。 然后沿arrays滑动,比较位置(i)和位置(i + 1)。 如果发生交换,则再次进行排序。

这是一些伪代码。

  1. swap = 0
  2. 做{
  3. for(i = o; i
  4. if(array [i]> array [i + 1])
  5. {
  6. 进行交流
  7. set swap = 1
  8. }
  9. / ** /
  10. } while(swap == 1);

以上说明了冒泡排序。

注意。 如果数据是有序的,则没有交换,也没有第二个循环。 排序算法能够提前退出。

如果一个五十元素数组是有序的,那么排序将进行50次比较并且已经停止。 之前描述的交换分类必须进行50 * 49或2450比较。

 // BUBBLE SORT. #include  #define MAX 20 int main() { int arr[MAX];int no; printf("PLEASE ENTER THE CURRENT SIZE OF THE ARRAY\n"); scanf("%d",&no); int i; printf("PLEASE ENTER THE ELEMENTS OF THE ARRAY\n"); for(i=0;iarr[i+1]) { flag=1; temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } else continue;/* not necessary*/ } if(flag==0) /*implies that the array is alraedy sorted*/ break; } printf("THE SORTED LIST:\n\n"); for(i=0;i