10月24 日 c语言 选择法 冒泡法 交换法 插入法折半法 汇总

来源:互联网 发布:mac os 配置 postman 编辑:程序博客网 时间:2024/06/14 08:23
选择法 
在第一次排序过程中将第一个数字和最小的数字进行了置换位置
而第二次排列过程中,将第二个数字和剩下的数字中最小的进行了置换位置
以此类推


for(i=0;i<9;i++)           //设置外层循环下标0-8的元素
{
t=a[i];   //设置当前元素为最小值
h=i;   //记录元素位置
for(j=i+1;j<10;j++)  //内层元素i+1到9
{
if(a[j]<t)   //如果当前元素比最小值小
{
t=a[j];   //重新设置最小值
h=j;   //记录元素的位置
}
}




冒泡法
在第一次排序的过程中,将最小的数字移动到第一的位置,并将其他数字依次向后移动,
在第二次排序过程中,从第二个数字开始的剩余的数字中选择最小的数字,并将其移动到第二的位置,剩余的数字依次向后移动,
依次类推


for(i=1;i<10;i++)  //外循环元素下标1-9
{
for(j=9;j>=i;j--) //内层循环元素下标i-9
{
if (a[j]<a[j-1])  //如果前一个数比后一个数大
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}
}
}










交换法
在第一次排序过程中将第一个数与后边的数依次进行比较
然后使用相同的方法从当前第二个数字开始,继续和后面的数进行比较如果遇到比当前数字小的数字则交换位置
依次类推。
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(a[j]<a[i])
{
交换
}
}
}






插入法


在第一次排序过程中将第一个数取出来,并放在第一个位置
然后取出第二个数与第一个数进行比较,如果第二个数小于第一个数,则将第二个数排在第一个数之前,否则将第二个数排在第一个数之后
如果当前数较小,还要与之前的数字进行比较
依次类推
 for(i=1;i<10;i++)
 {
t=a[i] //设置插入值
     h=i-1;
while((h>=0)&&(t<a[h]))
{
a[h+1]=a[h];
h--;
}
a[h+1]=t;
 }




 折半法
首先获取中间元素,从左右两侧分别取出数组元素与中间值进行比较
如果左侧取出的值比中间小,则取下一个数组元素与中间值进行比较
如果左侧取出的值比中间值大,则交换两个互相比较的数组元素值
右侧的比较正好与左侧相反
当右侧取出的值比中间大的时候,取出前一个数组元素的值与中间值进行比较
如果右侧取出的值比中间值小,则交换两个互相比较的数组元素值
当中间值两侧的数组都比较一遍以后,数组以第一个元素为起点
以中间值为终点,以上述的方法进行比较。当比较完成后,继续以折半的方式进行比较,
直到将一组数字按从小到大排序为止


void CelerityRun(int left, int right ,int array[])


int i,j;
 int middle,t;
 i=left;
 j=right;
 middle=array[(left+right)/2];
 do
 {
while((array[i]<middle)&&(i<right))
i++;
while((array[j]>middle)&&(j>left))
j--;
if(i<=j)
{
t=array[i];
array[i]=array[j];
array[j]=t;
j++;
i--;
}
 }while (i<=j);
 if (left<j)
CelerityRun(left,array);
if (right>j)
CelerityRun(i,right,array);
}
阅读全文
0 0
原创粉丝点击