我这冒泡排序错在哪?

错误:for(j=1; j<N; j++) 改成:for(j=i; j<N;j++)

	for (i = 0; i < N-1; i++) 
	{
		for (j = i; j < N; j++) 
		{
			if (a[j] < a[i])
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}

 

……错在 用a[i] 和 a[j]交换

你得用前一个书和当前数比较,而不是用 第 i 和 j 个数比较

for (i = 0; i < N - 1; i++) 
{
	for (j = 1; j < N - i; j++) {
		if (a[j - 1] > a[j])
		{
			temp = a[j];
			a[j] = a[j - 1];
			a[j - 1] = temp;
		}
	}
}

 

#include<iostream>
using namespace std;
#define N 4
int main(){
	int i,j,temp,a[N];
	for(int i=0;i<N;i++)
	    cin>>a[i];
	for(i=0;i<N-1;i++){
	    for(j=1;j<N-i;j++)
	        if(a[j-1]>a[j]){//如果前面大于后面,交换
	            temp = a[j-1];
	            a[j-1] = a[j];
	            a[j] = temp;
	        }
	    
	}
	for(i=0;i<N;i++)
	    cout<<a[i]<<endl;

	return 0;
}