1.选择排序
思想:第一次找出1~n中最小的一个,使其与第一个交换位置;第二次找出2~n中最小的,使其与第二个交换位置……以此类推
找的过程是直接找的最小的记录项数,最后交换
for(i=1;i<=n;i++){
k=i;
for(j=1;j<=n;j++)
if(h[j]<h[k]) k=j;
temp=h[i];//start
h[i]=h[k];
h[k]=temp;//end为交换
}
i表示第几次,并且表示交换的项
2.冒泡排序
思想:第一次找出最大的交换到最后一个,交换方法是从第一个开始,12比较交换,23……(n-1)n;第二次找出1~n-1中最大的交换到倒数第二个,交换方法也是从第一个开始……(n-2)(n-1)
for(i=1;i<n;i++)
for(j=1;j<=n-1;j++)
if(h[j]>h[j+1]){
temp=h[j];
h[j]=h[j+1];
h[j+1]=temp;
}
i是表示第几次循环,但不表示交换项
3.插入排序
思想:第一次循环从第二个开始,将第一个看做已排序的,将第二个与第一个比较,插入已排序的行列;第二次从第三个开始,同上,如果不需要比较(正好不需要排序),则直接将他插入到第一个
for(i=1;i<=n;i++){
temp=h[i];
k=1;
while(h[k]<temp&&k<i) k++;
for(j=i-1;j>=k;j--) h[j+1]=h[j];
h[k]=temp;
}
k是已排序的数列中比temp小的数的个数
p152~154