交换排序
for(int i=0;i<length-1;i++)
{
for(int j=i+1;j<length;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
第一个数,先和第二个到最后一个都比一遍,将最小的放在最前端。
第二个数,和第三个到最后一个都比一边,将最小的放在最前面。
冒泡排序
for(int i=0;i<length-1;i++)
{
for(int j=0;j<length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
第一遍:
第一个和第二个比,将大的放在后面。第二个和第三个比,将大的放在后面。。。
第二遍:
同上,但相对循环次数减少一次。
//优化:
bool flag = true;
for(int i=0;i<length-1 && flag;i++)
{
swap = false;
for(int j = 0;j <len -1-i;j++)//比较的下标
{
if(arr[j] > arr[j+1])
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
swap =true;
}
}
if(swap == false)//没有交换
{
break;
}
}
选择排序
int min = 0;
for (int i=0; i<length-1; i++)
{
min = i; //定义当前下标为最小值
for (int j=i+1;j<length;j++)
{
if (arr[min] > arr[j]) //如果存在更小的值
{
min = j; //调整 min 下标
}
}
if (i != min) //若 i 不为最小值,交换
{
int tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
先假设第一个为最小值,记录下标。第一个和之后的比,找到最小值的下标,记录。判断两个下下标是否相等,如果不相等交换。