int main()
{
int array[10] = { 56, 78, 2, 9, 98, 23, 56, 89, 74, 122 };
int i, j;
int temp = 0;
for (i = 0; i < 10; i++)
{
for (j = 1; j <10 - i; j++)
{
if (array[j - 1]>array[j])
{
temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
/*if (array[j] > array[j + 1])
{
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}*/
}
}
两种交换位置的方法感觉一样,为什么有一种执行的是错误的
for (j = 1
这里j从1开始,用if (array[j] > array[j + 1])是没有对array[0]进行比较处理
注释掉的那种变量j从0开始?
你可以尝试将数组的个数减小到3进行调试,这样理解比较快!!
i=0,j最大就是9,j+1就是10了,明显超出了
一.冒泡排序的基本思路是:每次都将相邻的两个数比较,将小的调到前头。
对于n个数,需要比较n-1趟,在第1趟中要进行n-1次的两两比较,而在第j趟时,需要进行n-j次两两比较。
1.代码分析:
12 for (i = 0; i < 9; i++)
13 {
14 for (j = 1; j 15 {
16 if (a[j - 1]>a[j])
17 {
18 temp = a[j];
19 a[j] = a[j-1];
20 a[j-1] = temp;
21 }
22 }
23 }
这里最为关键的地方在于if判断语句中的数组的下标:
if(a[j-1] > a[j])
因为数组的下标是从0开始。j初始值为1,所以该语句的功能是判断数组中的第一个元素与第二个元素的大小。若把该if判断语句换为了if(a[j] > a[j+])之后,
相当于忽略了数组中的第一个元素,直接比较数组中的第二个元素和第三个元素,显然是要出错的。
附加:

