for (i = 0; i < n; i++)
for (j =n-1; j > i; j--)
{
if (a[j] < a[j-1])
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
//交换排序
void exchange(int a[],int n)
{
int i,j,temp;
for (i = 0;i < n; i++)
for (j =i+1; j < n; j++)
{
if (a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
//选择排序
void selectsort(int a[],int n)
{
int i,j,k,temp;
for (i = 0; i <n; i++)
{
k = i;
for (j = i+1; j < n; j++ )
{
if (a[i] > a[j])
k = j;
}
if (k != i)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
//插入排序
void insert(int a[], int n)
{
int i,j,temp;
for (i = 1; i < n; i++)
{
j=i-1;
temp = a[i];
while (j >= 0 &&temp < a[j])
{
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
//快速排序
void run(int a[],int left,int right)
{
int i,j,temp,mid;
i = left;
j = right;
mid = a[(left+right)/2];
do{
while (i < right &&a[i] < mid) //从左扫描大于中值的数
i++;
while (j > right &&a[j] > mid)//从右扫描小于中值的数
j--;
if (i <= j) //找到一对进行交换,并改变i , j
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}while (i<= j);//完成一次扫描
if (left < j) //如果左部有值,递归扫描左部
{
run(a,left,j);
}
if (i <right)//如果右部有值,递归扫描右部
{
run(a,i,right);
}
}
void quicksort(int a[],int n)
{
run(a,0,n-1);
}
//希尔排序
void shell(int a[],int n)
{
int step[4] = {9,5,3,1};
int i,j,temp,k,s,w;
for (i = 0; i < 4; i++)
{
k =step[i];
// s = -k;
for (j = k;j < n; j++)
{
temp = a[j];
w = j-k;
while (temp < a[w]&& w >= 0&& w <= n)
{
a[w+k] = a[w];
w = w-k;
}
a[w+k] = temp;
}
}
}
void print(int a[],int n)
{
int i;
for (i = 0; i < n; i++)
printf("%-5d",a[i]);
printf("\n");
}
void main()
{
int a[20],i;
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("冒泡排序后\n");
bubble(a,N);
print(a,N);
printf("重新初始化后的数据\n");
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("交换排序后\n");
exchange(a,N);
print(a,N);
printf("重新初始化后的数据\n");
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("选择排序后\n");
selectsort(a,N);
print(a,N);
printf("重新初始化后的数据\n");
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("插入排序后\n");
insert(a,N);
print(a,N);
printf("重新初始化后的数据\n");
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("快速排序后\n");
quicksort(a,N);
print(a,N);
printf("重新初始化后的数据\n");
for (i = 0; i < 20; i++)
a[i] = rand()%100+1;
print(a,N);
printf("希尔排序后\n");
shell(a,N);
print(a,N);
}
虽然这几种是简单的排序,但是有时候还是会混淆,更复杂的排序算法,用到的时候再看,起码简单的要熟悉