排序算法总结
选择法排序:
for(i=0;i<9;i++)
{ max=i;
for(j=i+1;j<10;j++) if (a[max]<a[j])
max=j;
/* max为查找范围最大数所在元素下标 */ if (max != i) (if语句可省略) { temp=a[i];
a[i]=a[max];
a[max]=temp;}
}
直接排序法:
for(i=0;i<9;i++)
for( j=i+1;j<10;j++)
/* 当前元素与后续各元素逐个比较交换 if (a[i]<a[j])
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
} */
冒泡法排序:
for(i=9;i>=1;i--)
{ k=i;
/* k为每轮比较范围的终止元素下标 */ for(j=0;j<=k-1;j++) if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
}
冒泡法排序的改进:
for(i=9;i>=1;i--)
{ swap=0;
for(j=0;j<=i-1;j++) if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
swap=1; }
if(swap==0) break;
}
第二篇:C语言排序方法总结
排序方法总结:
1、 最原始的排序算法——比较法
基本思想:从数组的第一个元素开始,依次和后面的元素比较,如果比当前元素值小则互换值。
结论:比较法排序算法简单易于实现,但是算法执行效率低,排序过程中有多次数据交换的操作。
程序代码://对N个数进行升序排序 for (i=0;i<N-1;i++)
{
for (j=i+1;j<N;j++)
{
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
2、 最简单的排序算法——冒泡法(两两比较,逆序交换) 基本思想:将相邻两个数比较,将小的调到前头。
结论:冒泡法排序比较和交换数据次数减少,算法执行效率有所提高。 程序代码://对N个数进行升序排序
for (i=0;i<N-1;i++) /*i只控制外层循环执行的次数*/ {
for (j=0;j<N-1-i;j++)
/*j既控制内层循环执行的次数,又可作为比较数的下标*/ {
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
3、 效率最高的排序算法——选择法(逐个比较,逆序交换) 基本思想:设min为每轮比较的最小值元素的下标值,
第一轮先假设a[0]为最小值,min=0;用a[min]和a[1],a[2],…,a[n-1]比较,出现比a[min]小的值,让min=j;比较完毕,a[min]为第一轮最小值,将a[0]与a[min]互换,此时a[0]里存放最小值。
第二轮假设a[1]为最小值,min=1;用a[min]和a[2],…,a[n-1]比较,出现比a[min]小的值,让min=j;比较完毕,a[min]为第二轮最小值,将a[1]与a[min]互换,此时a[1]里存放次小值。 重复以上操作。外循环为n-1次,内循环比较n-i次. 结论:每轮比较后只交换一次数据,因此算法执行效率最高。 程序代码://对N个数进行升序排序
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k])
k=j; /*k指示当前比较的最小值下标*/
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
第三篇:c语言 排序算法总结
排序算法总结
选择法排序:
for(i=0;i<9;i++)
{ max=i;
for(j=i+1;j<10;j++) if (a[max]<a[j])
max=j;
/* max为查找范围最大数所在元素下标 */ if (max != i) (if语句可省略) { temp=a[i];
a[i]=a[max];
a[max]=temp;}
}
直接排序法:
for(i=0;i<9;i++)
for( j=i+1;j<10;j++)
/* 当前元素与后续各元素逐个比较交换 if (a[i]<a[j])
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
} */
冒泡法排序:
for(i=9;i>=1;i--)
{ k=i;
/* k为每轮比较范围的终止元素下标 */ for(j=0;j<=k-1;j++) if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}
}
冒泡法排序的改进:
for(i=9;i>=1;i--)
{ swap=0;
for(j=0;j<=i-1;j++) if (a[j]>a[j+1])
{ temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
swap=1; }
if(swap==0) break;
}