//选择排序,每一轮选出新的最值,与上一个最值交换后依次从数组起始位置开始存放
//插入排序,每一轮选出一个值与前面的值比较,若从小到大排,若前面的值大则交换,否则不动,直到交换后这个值没有前面的值小,也没有后面的值大即可
#include<iostream>
using namespace std;
int main()
{
int arr2[5] = { 300,350,200,400,250 };
cout << sizeof(arr2)/sizeof(arr2[0])-1 << endl;
//选择排序,升序
for (int i = 0; i < sizeof(arr2)/sizeof(arr2[0])-1; i++)
{
int min = i;//设第一个数为最小值
for (int j = i+1; j < sizeof(arr2) / sizeof(arr2[0]); j++)
{
if (arr2[min] > arr2[j])
{
min = j;//更新最小值位置
}
}
//更新最小值
int x = arr2[min];
arr2[min] = arr2[i];
arr2[i] = x;
}*/
//插入排序,升序
cout << "插入排序" << endl;
for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]) - 1; i++)
{
int j = i;
while (j >= 0 && arr2[j + 1] < arr2[j])//一定要先判断j在判断前后的值,否则当j=-1时,会出现访问数组的错误
{
int x = arr2[j + 1];
arr2[j + 1] = arr2[j];
arr2[j] = x;
j--;
}
}
for (int i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++)
{
cout << arr2[i] << endl;
}
system("pause");
return 0;
}
网友评论