[英]WAP a c program for Bubble sort
編寫一個C程序對n個元素的數組執行冒泡排序。 我編寫以下代碼,但條件是, 如果我們發現列表在任何中間點排序 ,則停止該過程
請告訴我如何解決這個問題?
#include <stdio.h>
#include <conio.h>
void bubble_sort(int[], int);
void main() {
int arr[30], num, i;
printf("\nEnter no of elements :");
scanf("%d", &num);
printf("\nEnter array elements :");
for (i = 0; i < num; i++)
scanf("%d", &arr[i]);
bubble_sort(arr, num);
getch();
}
void bubble_sort(int iarr[], int num) {
int i, j, k, temp;
printf("\nUnsorted Data:");
for (k = 0; k < num; k++) {
printf("%5d", iarr[k]);
}
for (i = 1; i < num; i++) {
for (j = 0; j < num - 1; j++) {
if (iarr[j] > iarr[j + 1]) {
temp = iarr[j];
iarr[j] = iarr[j + 1];
iarr[j + 1] = temp;
}
}
printf("\nAfter pass %d : ", i);
for (k = 0; k < num; k++) {
printf("%5d", iarr[k]);
}
}
}
訣竅是在迭代內部循環中的列表元素時計算或測試是否存在任何交換,如果不需要交換任何元素,那肯定意味着列表已排序 。
冒泡排序的思想是,在每次迭代中,列表中最大的元素都到達末尾。 因此,在第一次迭代之后,數組的最大元素到達了結尾。 同樣,在第二次迭代中,數組中的第二個最大元素到達倒數第二個位置,依此類推。
因此您必須在j變量循環中進行一些更改。 使它像這樣:
for (i = 1; i < num; i++) {
for (j = 0; j < num - i; j++) {
if (iarr[j] > iarr[j + 1]) {
temp = iarr[j];
iarr[j] = iarr[j + 1];
iarr[j + 1] = temp;
}
}
通過此J循環將僅迭代未排序的那些元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.