冒泡排序法的改进
若给出10个数字,分别为34 66 90 45 100 150 65 92 27 74,用冒泡排序法后可得到正确排序,但其中有些不需要比较,可以直接跳过,该如何处理,希望大神指教!谢谢!
# include<stdio.h>
int main()
{
int a[10];
int i,j,t;
printf("input 10 number:\n");
for(i=0;i<10;i++);
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(j=0;j<9-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i];=a[i+1];a[i+1]=t;}
printf(“the sorted number:\n”);
for(i=0;i<10;i++)
printf(“%d”,a[i]);
printf(“\n”);
return 0;
}
} c语言
[解决办法]
#include <stdio.h>
int main(void)
{
int arr[9];
int temp, i, j;
int swapped = 1;
// 初始化
for (i = 0; i <= 9; i++)
arr[i] = 9 - i;
// 排序前
printf("Before Sort: ");
for (i = 0; i <= 9; i++)
printf("%d ", arr[i]);
// 冒泡排序
for (i = 0; swapped; i++) {
swapped = 0;
for (j = 0; j < 9 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1;
}
}
}
// 排序后
printf("\n After Sort: ");
for (i = 0; i <= 9; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
Before Sort: 9 8 7 6 5 4 3 2 1 0
After Sort: 0 1 2 3 4 5 6 7 8 9
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void better_bubble_sort(int *D, int n) {
int b,i,m,t;
b=n-1;
while (b) {
m=0;
for (i=0;i<b;i++) {
if (D[i]>D[i+1]) {t=D[i];D[i]=D[i+1];D[i+1]=t;m=i;}
}
b=m;
}
}
int main() {
int d[10],n,i;
srand(time(NULL));
for (n=0;n<10;n++) {
printf("------%d------\n",n);
for (i=0;i<n;i++) {d[i]=rand()%100;printf(" %02d",d[i]);}
printf("\n");
better_bubble_sort(d,n);
printf("sorted:\n",n);
for (i=0;i<n;i++) { ;printf(" %02d",d[i]);}
printf("\n");
}
}
//------0------
//
//sorted:
//
//------1------
// 87
//sorted:
// 87
//------2------
// 41 40
//sorted:
// 40 41
//------3------
// 21 03 02
//sorted:
// 02 03 21
//------4------
// 27 03 70 21
//sorted:
// 03 21 27 70
//------5------
// 02 50 57 77 34
//sorted:
// 02 34 50 57 77
//------6------
// 74 94 80 05 58 10
//sorted:
// 05 10 58 74 80 94
//------7------
// 50 43 98 36 90 83 73
//sorted:
// 36 43 50 73 83 90 98
//------8------
// 07 20 21 13 56 90 06 51
//sorted:
// 06 07 13 20 21 51 56 90
//------9------
// 14 94 94 32 14 24 81 32 00
//sorted:
// 00 14 14 24 32 32 81 94 94
//