冒泡排序
?有疑问,基本冒泡排序1
#include<stdio.h>
void bubble_sort1(int array[],int arraySize)
{
int i,j,tmp;
for(i=0;i<arraySize-1;i++)/*每次在末尾排好一个,循环n-1次*/
{
for(j=0;j<arraySize-1-i;j++)/*遍历*/
{
if(array[j]>array[j+1])/*交换*/
{
/*tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;*/
array[j]^=array[j+1]^=array[j]^=array[j+1];
}
}
}
}
int main(void)
{
int array[5]={
2,1,3,5,4};
bubble_sort1(array,5);/*排序好后为:1 2 3 4 5*/
int i;
for(i=0;i<5;i++)printf("%d",array[i]);
puts("");
}
以前做排序为了省事直接在创建在*.cpp里,今天遇到问题了。
这段代码在g++下运行正确,输出为12345
但在gcc下运行错误,输出为00235。
应该错在这句话:array[j]^=array[j+1]^=array[j]^=array[j+1];
疑问:不知两种编译下,是异或运算有区别?还是gcc有特殊的序列点? 不了解其中本质。
一个数(同一个地址)自己与自己异或3次会是0,但下角标是j和j+1,应该不会涉及到这种情况。
选择排序
普通选择排序
#include<stdio.h>
void selectionSort(int array[],int arraySize)
{
for(int i=0; i<arraySize-1; i++)
{
int MIN=i;
for(int j=i+1; j<arraySize; j++)array[j]<array[MIN]?MIN=j: