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)。 如果发生交换,则再次进行排序。
这是一些伪代码。
- swap = 0
- 做{
- for(i = o; i
- if(array [i]> array [i + 1])
- {
- 进行交流
- set swap = 1
- }
- / ** /
- } 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