一.冒泡算法
自己的理解:
对于n个数,
第1趟:比较n-1次才能找出最大(最小)的数字,
第2趟:比较n-2次,
第3趟:比较n-3次
... ...
第n-1趟: 比较1次。(完结)
特点:每趟比较都是相邻的两个数比较,然后把两个之中较大(升序)的放在后面,一趟完毕,最大的数字就被找出来了,下次不再比较。
对应的代码:
mian(){
int a[10],i,j;
int t; //临时变量
/*输入10个数据*/
for(i=0;i<10;i++){ scanf("%d",&a[i]); }
/*开始冒泡排序*/
for(j=0;j<9;j++){
for(i=0;i<9-j;i++)
if(a[i]<a[i+1]) {
/*相邻元素比较,交换大的放前面*/
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
//此处的9,实质是n-1.
}
//时间复杂度O(n^2)
二.选择排序
原理:
选择排序很简单,他的步骤如下:
从左至右遍历,找到最小(大)的元素的下标,然后与第一个元素交换。
从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换。
以此类推,直到所有元素均排序完毕。
之所以称之为选择排序,是因为每一次遍历未排序的序列我们总是从中选择出最小的元素。
public void sort(){
for(int i = 0; i < arraytoSort.length - 1 ; i++){
int min = i;
int temp;
//找出最小值的下标
for(int j = i + 1; j < arraytoSort.length ; j++){
if(arraytoSort[j] < arraytoSort[min]){
min = j;
}
}
//交换i与min的数组元素,下次+1不再比较了
temp = arraytoSort[min];
arraytoSort[min] = arraytoSort[i];
arraytoSort[i] = temp;
}
}
//时间复杂度O(n^2).
三.常用数据结构的时间复杂度
干货分享:http://blog.csdn.net/stardhb/article/details/50453127