冒泡排序:
#include <iostream>
using namespace std;
int main()
{
int a[1000];
int n = 0;
cout << "输入任意字母开始排序" << endl;
while (cin >> a[n])
{
n++;
}
int i, j;
int temp;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - 1 - i; j++)
{
if(a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for(i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
这个冒泡排序是从小到大排的, 如果每次前一个数都比后一个数大, 那么就得把这两个数交换一次,每次交换都得浪费时间和内存,这样效率不是很高。
选择排序:
#include <iostream>
using namespace std;
int main()
{
int a[1000];
int n = 0;
cout << "输入任意字母开始排序" << endl;
while (cin >> a[n])
{
n++;
}
int i, j, p;//p用来记录每轮循环中最小数的下标
int temp;
for(i = 0; i < n - 1; i++)
{
p = i;
for(j = i + 1; j < n; j++)
{
if(a[p] > a[j])//如果有比a[p]更小的数就把其下标赋给p;
p = j;
}
if(i != p)//如果p和最开始的i不一样就交换这两个值,否则不交换;
{
temp = a[p];
a[p] = a[i];
a[i] = temp;
}
}
for(i = 0; i < n ;i++)
cout << a[i] << " ";
cout << endl;
system("pause");
return 0;
}
这个排序也是从小到大排序的,注意 p 是用来记录每轮循环中最小数的下标,在内层循环中不进行交换,只是找到最小的数,找到之后就比较这个数的下标是不是和 i 一样,如果不一样就将这两个数交换。
冒泡和选择的区别:
冒泡排序是在内层循环中进行交换的,这样交换的次数是比较多的,如果数据不好那么每轮循环都得交换n - i - 1 次,然后外层还得循环,这样的效率是很低的
选择排序是在外层循环中进行交换的,就算每次都要交换数据,那么一共也只要交换n - 1 次,这样效率就会提高很多。
还有其他的排序算法以后再学习,之后再把这些排序全部总结一下。