int main()
{
int i;
int a[] = {4,2,9,16,13,15,14};
int n = sizeof(a)/sizeof(int);
insertsort(a,n);
printf("排序好的数组为:");
for (i = 0; i < n; i++) {
printf(" %d", a[i]);
}
printf("\n");
system("pause");
return 0;
}
插入排序
//直接插入 insertsort
#include <stdio.h>
#include <stdlib.h>
void insertsort(int *a,int n)
{
int i;
int j;
for(i=0;i<n-1;i++)
{
if(a[i+1] < a[i])
{
int temp = a[i+1];
for(j=i;j>=0 && a[j]>temp;j--)
{
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
希尔排序
插入排序改进
//希尔排序
#include<stdio.h>
#include<stdlib.h>
void shellSort1(int a[],int n){
int i,j,gap,temp;
for(gap = n/2;gap>0;gap/=2){
for(i=gap;i<n;i++){
temp = a[i];
for(j = i-gap;j>=0&&a[j]>temp;j-=gap){
// 很明显和插排的不同就是插排这里是j = i - 1
a[j+gap] = a[j];
}
a[j+gap] = temp;
}
}
}
冒泡排序
//冒泡排序
#include<stdio.h>
#include<stdlib.h>
void bobblesort(int *a,int n)
{
int i;
int j;
int temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
快速排序
//快速排序
#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp=a[left]; //temp中存的就是基准数
i=left;
j=right;
while(i!=j)
{
//顺序很重要,要先从右往左找
while(a[j]>=temp && i<j)
j--;
//再从左往右找
while(a[i]<=temp && i<j)
i++;
//交换两个数在数组中的位置
if(i<j)//当哨兵i和哨兵j没有相遇时
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最终将基准数归位
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程
quicksort(i+1,right);//继续处理右边的,这里是一个递归的过程
}
int main()
{
int i,j,t;
//读入数据
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n); //快速排序调用
//输出排序后的结果
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar(); getchar();
//这里的getchar();用来暂停程序,以便查看程序输出的内容
//第一个getchar(),sacnf()没有吸收回车
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
return 0;
}