数据排序的几种方法c语言实现
- 格式:docx
- 大小:14.89 KB
- 文档页数:6
数据排序的几种方法(c语言实现)
/*
功能:用以下几种方法实现c语言中的常用排序
选择排序
冒泡排序
插入排序
快速排序
堆排序
归并排序
基数排序
希尔排序
*/
#include <stdio.h>
void select_Sort1(int a[],int n);
void select_Sort2(int a[],int n);
void bubble_Sort(int a[],int n);
void insert_Sort(int a[],int n);
void quick_Sort(int a[],int low,int high);
int findpos(int a[],int low,int high);
int main()
{
int a[10];
int i;
printf("please enter ten int number:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
//select_Sort2(a,10);
//bubble_Sort(a,10);
//insert_Sort(a,10);
quick_Sort(a,0,9);
printf("after sorted:\n");
for(i=0;i<10;i++)
{
printf("%5d",a[i]);
}
return 0;
}
//===========================第一种方法:选择排序法=======================================
//用一种较为容易理解的方法实现选择排序
void select_Sort1(int a[],int n)
{
int i,j,k;
//外部循环从小到大,依次找出各位置上的值(最后一个位置上的值除外,因为在循环的过程中各个位置上的值逐渐确定下来,最后一个值自然就确定了)
for(i=0;i<n-1;i++)
{
//内部循环从外部循环指针的下一个位置开始,将后续位置上取到的值逐渐与外部循环所对应的指针上的值进行比较
for(j=i+1;j<n;j++)
{
if(a[j]<a[i])
{
// 找到比该位置上的值小的值就进行一次交换
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}
}
//以下方法实现起来效率更高,之所以效率高是因为找到一个比外循环指针所对应值更小的值时没有马上交换而是把位置先记录下来,内循环结束后再交换
void select_Sort2(int a[],int n)
{
int i,j,k,t;
//外部循环从小到大,依次找出各位置上的值(最后一个位置上的值除外,因为在循环的过程中各个位置上的值逐渐确定下来,最后一个值自然就确定了)
for(i=0;i<n-1;i++)
{
//内部循环从外部循环指针的下一个位置开始,将后续位置上取到的值逐渐与外部循环所对应的指针上的值进行比较
k=i;//k的作用是记录内部指针一趟比较下来,哪个位置所对应的值比外指针所对应的值小,将该位置存放到k中,默认情况下k的值是外指针对应位置
for(j=i+1;j<n;j++)
{
if(a[j]<a[k])
k=j;//k=j 记录下最小值的位置
}
//进行交换,t是临时变量
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
//===========================第二种方
法:冒泡排序法=======================================
void bubble_Sort(int a[],int n)
{
int i,j,t;
//外层循环控制圈数,对n个数排序,需要n-1圈
//外层循环指针对应将要放数的位置,每次结束外层循环都将排好了一个数
for(i=n-1;i>0;i--)
{
//内层循环对相邻的俩个数进行比较,大者冒泡到后边,j<i使得内层循环不必再对已经排好的数进行访问
for(j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
//============================第三种方法:插入法排序======================================
void insert_Sort(int a[],int n)
{
int i,j,t;
//外层循环的作用是从0位置开始逐渐从数组中将n个数拿出来,与已经排好的数进行比较,插入到适当的位置
for(i=0;i<n;i++)