int a[100], i, j, n;//索引从1开始int flag =0;//是否发生交换for(i =1; i <= n; i++){for(j =1; j <= n-i; j++)if(a[j]> a[j+1]){swap(&a[j],&a[j+1]);
flag =1;}if(!flag)break;}
插入排序
每插入一个元素,与前面所有元素比较,找到插入位置后,后面的所有元素往后移一位。
T(n)=O(n²)
int a[100], i, j;scanf("%d",&a[1);for(i =2; i <= n; i++)//从第二个元素开始{scanf("%d",&a[i]);int x = a[i];//先把这个值存起来,以免被覆盖for(j = i; j>1&& a[j-1]>x; i--)/* 从当前位置开始,x和当前位置前面一个元素比较,如果x较小, */
a[j]= a[j-1];/* 这个元素后移 */
a[j]= x;//最后把x插入到该位置
选择排序
与冒泡类似,但每次先找到最小的,遍历完之后再交换。
T(n)=O(n²)
int a[100], i, j;for(i =1; i < n; i++){int k = i;for(j = i+1; j <= n; j++)if(a[j]< a[i]) k = j;if(k != i)//找到了swap(&a[k],&a[i]);}