现有基本的数据输出:
void OutPutSortResult(int num[],int length_num,int index)
{
printf("this is %03d-th!\t",index);
for(int i=0;i<length_num;i++)
printf("%d ",num[i]);
printf("\n");
}
写出最基本的main函数体:
int main()
{
int num[] = {2,1,3,4,6,5,9,8,7,10,-1,20,300,0,79,81,45,99,103,46};
int len = sizeof(num)/sizeof(int),i=0;
printf("原始数据\t");
for(i=0; i<len-1; i++)
printf("%d ",num[i]);
printf("%d\n\n",num[len-1]);
MyBubbleMoreAdvanceSort(num,len,0);
printf("\n排序之后的数据\t");
for(i=0; i<len-1; i++)
printf("%d ",num[i]);
printf("%d\n",num[len-1]);
return 0;
}
之后进行我们的基本的排序算法:
/*
插入排序:
该算法对较小的数据量的排序作用还是很不错的
该算法的执行过程与我们在打牌的过程挺像的,在打牌时
我们左手是空的,所有的牌都面朝下放在桌面上,
然后,一张一张的拿来插到指定的位置
*/
void MyInsertSort(int num[],int length_num,
int sort_type/*0:small to big ;>=1:big to small*/)
{
for(int i=0; i<length_num; i++)
{
int j = 0;
for(j=0; j<i; j++)
{
if(sort_type == 0)
{
if(num[j]>num[i])
break;
}
else
{
if(num[j]<=num[i])
break;
}
}
if(j<i)
{
int temp = num[j];
num[j++] = num[i];
for(; j<=i; j++)
{
num[i] = num[j];
num[j] = temp;
temp = num[i];
}
}
OutPutSortResult(num,length_num,i);
}
}
运行结果如下:
/*
冒泡排序:
*/
void MyBubbleSort(int num[],int length_num,int sort_type)
{
int i=0,j=0,k=0,flag = 1;
for(i=0; i<length_num-1&&flag==1; i++)
{
flag = 0;
for(j=0; j<length_num-1-i; j++)
{
if(num[j+1]<num[j] && sort_type == 0)
{
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
flag = 1;
}
else
{
if(num[j+1]>num[j] && sort_type != 0)
{
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
flag = 1;
}
}
}
OutPutSortResult(num,length_num,i);
}
}
运行结果如下:
/*
改进的冒泡排序,对左右进行双向排序
*/
void MyBubbleMoreAdvanceSort(int num[],int length_num,int sort_type)
{
int i=0,j=0,k=0;
int left = 0,right = length_num-1;
bool left_flag = true,right_flag = true;
for(i=left; i<=right && (left_flag == true || right_flag == true); i++)
{
left_flag = false;
right_flag = false;
for(j=left,k=right; j<right || k>left; j++,k--)
{
/*大数沉底*/
if(num[j] > num[j+1] && sort_type == 0)
{
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
right_flag = true;
}
else
{
if(num[j] < num[j+1] && sort_type != 0)
{
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
right_flag = true;
}
}
/*小数上升*/
if(num[k] < num[k-1] && sort_type == 0)
{
int temp = num[k];
num[k] = num[k-1];
num[k-1] = temp;
left_flag = true;
}
else
{
if(num[k] > num[k-1] && sort_type != 0)
{
int temp = num[k];
num[k] = num[k-1];
num[k-1] = temp;
left_flag = true;
}
}
}
right--;
left++;
OutPutSortResult(num,length_num,i);
}
}
运行结果如下:
/*
选择排序:
*/
void MySelectSort(int num[],int length_num,int sort_type)
{
int i=0,j=0,k=0,cur_index=0;
for(i=0; i<length_num-1; i++)
{
cur_index = i;
for(j=i+1; j<length_num; j++)
{
if(num[j]<num[cur_index] && sort_type == 0)
cur_index = j;
else
{
if(num[j]>num[cur_index] && sort_type != 0)
cur_index = j;
}
}
if(i != cur_index)
{
int temp = num[i];
num[i] = num[cur_index];
num[cur_index] = temp;
}
OutPutSortResult(num,length_num,i);
}
}
运行结果如下:
/*
希尔(shell)排序:
*/
void MyShellSort(int num[],int length_num,int sort_type)
{
int i=0,j=0,k=0,index = 0;
int gap = length_num/2;
while(gap>0)
{
for(k=0; k<gap; k++)
{
for(i=k+gap; i<length_num; i+=gap)
{
for(j=i-gap; j>=k; j-=gap)
{
if(num[j]>num[j+gap] && sort_type == 0)
{
int temp = num[j];
num[j] = num[j+gap];
num[j+gap] = temp;
}
else
{
if(num[j]<num[j+gap] && sort_type != 0)
{
int temp = num[j];
num[j] = num[j+gap];
num[j+gap] = temp;
}
}
}
OutPutSortResult(num,length_num,++index);
}
}
gap /= 2;
}
}
运行结果如下:
未完!待续!!!!
分享到:
相关推荐
C语言实现的几种排序算法的整理,完整代码
7种排序算法程序汇总 冒泡排序 选择排序 插入排序 希排序尔 快速排序 二叉排序树 堆排序
几种常见的排序算法代码,附有其效率及分析
关于数据的几种排序算法的程序对比分析,结合具体案例
几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
几种排序算法的c++实现,保证都能运行,资料齐全,亲自调试
最常见的几种排序算法 网页形式的,忘记什么时候找的了
通过链表实现几种排序算法,并比较它们的优劣。
几种排序算法的代码实现。c语言版的。排序算法 希尔排序 快速排序 堆排序 归并排序 计数排序
几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的Java实现几种经典排序算法的...
几种排序算法的比较,vb期末编程作业
几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 Insertion...
一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。
(1)直接插入排序算法验证。 (2)快速排序算法验证。 (3)直接选择排序算法验证。 几种简单的排序算法代码
几种经典的排序算法 (1)若n较小(如n≤50),可采用直接插入或直接选择排序。 当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。 (2)若文件初始状态基本有序...
该程序包含了几种算法,读者可对此进行试验
排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡...在研究学习了之前几种排序算法的基础上,讨论发现一种新的排序算法,并通过了进一步的探索,找到了新的排序算法较之前几种算法的优势与不足。
几种基本排序算法的实现.doc
使用vc的编译器可以编译运行。需要在运行中提供一个不短于1 000 000字节的纯数字文本o.txt作为数据输入。我用的是圆周率。然后就可以跑了。运用内联汇编进行时间...针对归并、快排、shell、插入、选择等多种排序设计。