选择法排序
选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序。从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,然后将第二个数字与剩下数字中最小的那个交换位置,以此类推,直到最后一个数字。
例如输入数组{7,5,4,8,6,2,3}
第一次排序通过查找最小的数字,交换7与2的位置;第二次查找5后面最小的数字,找到了3,交换5与3的位置;第三次查找4之后最小的数字,发现并没有数字比4小,交换4与4的位置(相当于没有改变);第四次查找8后面最小的数字5,交换8与5的位置。
起始值 | 7 | 5 | 4 | 8 | 6 | 2 | 3 |
---|---|---|---|---|---|---|---|
第一次排序 | 2 | 5 | 4 | 8 | 6 | 7 | 3 |
第二次排序 | 2 | 3 | 4 | 8 | 6 | 7 | 5 |
第三次排序 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
因为剩下的数字中,可能有不止一个数字比当前数字小,所以需要一个临时值来储存当前最小的数字,还需要一个标志位来记录当前最小数字对应的位号。实现代码如下:
for(i = 0;i < n-1;i++)
{
temp = a[i];
iPot = i;
for(j = i+1;j < 10;j++) //从每一个数字依次向后查找
{
if(a[j] < temp)
{
temp = a[j]; //记录当前查找到的最小值与最小值对应的位号
iPot = j;
}
}
a[iPot] = a[i];
a[i] = temp;
}
选择法排序逻辑简单,容易实现。共需要进行(n-1)!次比较,(n-1)次交换位置。计算量是固定的。对于较大的n运算速度较慢。
冒泡法排序
冒泡法排序是指:在排序时,每次比较数组中的相邻两个数组元素的值,将较小的数排在较大的数前面。
例如还是输入数组{7,5,4,8,6,2,3}
7 | 5 | 4 | 8 | 6 | 2 | 3 |
---|