user-0 提问: 排序问题

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: #include <stdio.h>  void px(int a[]) {     int temp;     if(a[0] < a[1] && a[1] < a[2] && a[2] < a[3])         return;     for(int c = 0;c<=(3-1);)     {         for(int b = 0;b<=3;)         {             if(a[b] > a[b+1])             {                 temp = a[b];                 a[b+1] = a[b];                 a[b] = temp;             }             b++;         }         c++;     }     return; }  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len - 1; i++)         for (j = 0; j < len - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }  int main(void) {     int dpx[4];     printf("输入待排序数据(4个):\n");     scanf("%d%d%d%d", &dpx[0], &dpx[1], &dpx[2], &dpx[3]);     printf("%d %d %d %d\n",dpx[0],dpx[1],dpx[2],dpx[3]);     //px(&dpx[0]);     bubble_sort(dpx, 4);     printf("%d %d %d %d\n",dpx[0],dpx[1],dpx[2],dpx[3]);     return 0; }  参考一下吧

user: user-2
content: 引用 3 楼 lexnewgate 的回复: void swap(int *a, int *b) {     int temp;     temp = *a;     *a = *b;     *b = temp; }  void bubble_sort(int a[], int length) {     for (int j = 0; j < length-2; j++)     {         for (int i = 0; i < length - 1-j; i++)         {             if (a[i] > a[i + 1])             {                 swap(&a[i], &a[i + 1]);             }         }     } } #include <stdio.h>  int main(void) {     int dpx[4];     printf("输入待排序数据(4个):\n");     scanf("%d%d%d%d", &dpx[0], &dpx[1], &dpx[2], &dpx[3]);     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     bubble_sort(&dpx[0],sizeof dpx/sizeof (int));     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     return 0; }    1. scanf用错了 需要传地址,而非int值. http://www.cplusplus.com/reference/cstdio/scanf/ 2. 排序写错了. 写了个冒泡仅供参考 冒泡排序中，第一层循环是不是应该是length - 1而不是-2呢？  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len - 1; i++)         for (j = 0; j < len - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }

user: user-3
content: 引用 6 楼 cfjtaishan 的回复:[quote=引用 3 楼 lexnewgate 的回复:]  void swap(int *a, int *b) {     int temp;     temp = *a;     *a = *b;     *b = temp; }  void bubble_sort(int a[], int length) {     for (int j = 0; j < length-2; j++)     {         for (int i = 0; i < length - 1-j; i++)         {             if (a[i] > a[i + 1])             {                 swap(&a[i], &a[i + 1]);             }         }     } } #include <stdio.h>  int main(void) {     int dpx[4];     printf("输入待排序数据(4个):\n");     scanf("%d%d%d%d", &dpx[0], &dpx[1], &dpx[2], &dpx[3]);     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     bubble_sort(&dpx[0],sizeof dpx/sizeof (int));     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     return 0; }    1. scanf用错了 需要传地址,而非int值. http://www.cplusplus.com/reference/cstdio/scanf/ 2. 排序写错了. 写了个冒泡仅供参考 冒泡排序中，第一层循环是不是应该是length - 1而不是-2呢？  void bubble_sort(int *arr, int len) {     int i, j;     int tmp;      for (i = 0; i < len - 1; i++)         for (j = 0; j < len - i -1; j++)             if (arr[j] > arr[j+1]) {                 tmp = arr[j];                 arr[j] = arr[j+1];                 arr[j+1] = tmp;             } }[/quote]  对的,是应该length-1,而非length-2. 我的写错了,感谢纠正.

user: user-4
content: scanf("%d%d%d%d",dpx[0],dpx[1],dpx[2],dpx[3]); 这个函数用错了，你们好快把我要说的都说了

user: user-3
content: void swap(int *a, int *b) {     int temp;     temp = *a;     *a = *b;     *b = temp; }  void bubble_sort(int a[], int length) {     for (int j = 0; j < length-2; j++)     {         for (int i = 0; i < length - 1-j; i++)         {             if (a[i] > a[i + 1])             {                 swap(&a[i], &a[i + 1]);             }         }     } } #include <stdio.h>  int main(void) {     int dpx[4];     printf("输入待排序数据(4个):\n");     scanf("%d%d%d%d", &dpx[0], &dpx[1], &dpx[2], &dpx[3]);     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     bubble_sort(&dpx[0],sizeof dpx/sizeof (int));     printf("%d %d %d %d\n", dpx[0], dpx[1], dpx[2], dpx[3]);     return 0; }    1. scanf用错了 需要传地址,而非int值. http://www.cplusplus.com/reference/cstdio/scanf/ 2. 排序写错了. 写了个冒泡仅供参考

user: user-3
content: for(int i=0;i<length-1;i++)     {         if(a[i]>a[i+1])         {             swap(&a[i],&a[i+1]);         }     }  1. scanf用错了 需要传地址,而非int值. http://www.cplusplus.com/reference/cstdio/scanf/ 2. 排序写错了. 写了个冒泡仅供参考

user: user-5
content: scanf("%d%d%d%d", dpx[0], dpx[1], dpx[2], dpx[3]);  改成：  scanf("%d%d%d%d", &dpx[0], &dpx[1], &dpx[2], &dpx[3]);