急求用C语言写的 直插排序,直接选择排序,冒泡排序算法

要把这3个算法写到一个程序中,最重要的是要能运行的!随便弄的还运行不了的就不要回答。。。

倾情奉献:
#include "stdio.h"
void selectSort(int a[],int n){//选择排序
int change,i,j;
int mini=a[0];
int minipos=0;
for(i=0;i<n;i++){
mini=a[i];
minipos=i;
for(j=i;j<n;j++){
if(a[j]<mini){
mini=a[j];
minipos=j;
}
}
change=a[minipos];
a[minipos]=a[i];
a[i]=change;
}
}
void sub(int a[],int n) //这是一个从小到大插入排序得函数
{
int i,j,t; //t为临时变量
for(i=0;i<n;i++) //从第一个元素开始对n个元素一次进行插入排序
{ //假定当前准备对第i个元素进行插入排序,前面得i-1个元素已经
for(t=a[i],j=i-1;j>=0&&t<a[j];j--) //按从小到大排好序了。将a[i]提取出来放在临时变量t中,其从a[i-1]开始与前面得元素依次进行比较,若小于,则将该元素后移一位,直到找到第一个t>a[j],停止比较,将t放在该元素后面,即放在a[j+1]中
{
a[j+1]=a[j];
}
a[j+1]=t;
}
}
void maopao(int a[],int n)
{
int i,j,t;
for(i=1;i<n;i++) //冒泡是第i次循环在数组末尾倒数第i个位置依次产生第i大得数值
for(j=0;j<n-i;j++)
{
t=a[j+1];
if(a[j]>a[j+1]) //大值后移
{
a[j+1]=a[j];
a[j]=t;
}
}
}void print(int a[],int n){//输出数组的所有元素
int i;
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}void main()
{
int i,n,c[100];
printf("请输入数组元素的个数:");
scanf("%d",&n);
printf("请依次输入各元素:\n");
for(i=0;i<n;i++)
scanf("%d",&c[i]);
sub(c,n);
printf("用插入法对这些元素从大到小进行排序:\n");
print(c,n);
maopao(c,n);
printf("用冒泡法对这些元素从大到小进行排序:\n");
print(c,n);
selectSort(c,n);
printf("用选择法对这些元素从大到小进行排序:\n");
print(c,n);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-15
#include <stdio.h>// 冒泡排序
/////////////////////////////////////////////////////////////////////
void BubbleSort(int* pData,int Count)
{
int iTemp;
for(int i=1;i<Count;i++)
{
for(int j=Count-1;j>=i;j--)
{
if(pData[j]<pData[j-1])
{
iTemp = pData[j-1];
pData[j-1] = pData[j];
pData[j] = iTemp;
}
}
}
}// 插入排序
/////////////////////////////////////////////////////////////////////
void InsertSort(int* pData,int Count)
{
int iTemp;
int iPos;
for(int i=1;i<Count;i++)
{
iTemp = pData[i];
iPos = i-1;
while((iPos>=0) && (iTemp<pData[iPos]))
{
pData[iPos+1] = pData[iPos];
iPos--;
}
pData[iPos+1] = iTemp;
}
}// 选择排序
/////////////////////////////////////////////////////////////////////
void SelectSort(int* pData,int Count)
{
int iTemp;
int iPos;
for(int i=0;i<Count-1;i++)
{
iTemp = pData[i];
iPos = i;
for(int j=i+1;j<Count;j++)
{
if(pData[j]<iTemp)
{
iTemp = pData[j];
iPos = j;
}
}
pData[iPos] = pData[i];
pData[i] = iTemp;
}
}// 主函数
/////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
int data1[] = {10,9,8,7,6,5,4};
printf("【冒泡排序】\n");
printf(" 排序前:");
for (int i=0;i<7;i++)
printf("%d\t",data1[i]);
printf("\n");
BubbleSort(data1,7);
printf(" 排序后:");
for (i=0;i<7;i++)
printf("%d\t",data1[i]);
printf("\n\n");
int data2[] = {11,0,8,2,1,4,5};
printf("【插入排序】\n");
printf(" 排序前:");
for (i=0;i<7;i++)
printf("%d\t",data2[i]);
printf("\n");
InsertSort(data2,7);
printf(" 排序后:");
for (i=0;i<7;i++)
printf("%d\t",data2[i]);
printf("\n\n");
int data3[] = {21,20,11,8,3,4,1};
printf("【选择排序】\n");
printf(" 排序前:");
for (i=0;i<7;i++)
printf("%d\t",data3[i]);
printf("\n");
SelectSort(data3,7);
printf(" 排序后:");
for (i=0;i<7;i++)
printf("%d\t",data3[i]);
printf("\n\n");
getchar();

return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网