/*************************
几种常见的排序算法,
1,冒泡排序
2,插入排序
3,选择排序
4,快速排序
*************************/
#include "stdio.h"
void swap(int* a,int* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
//冒泡排序,注意j 从1开始到n-i;
void maopao_sort(int s[],int n)
{
int i,j,temp;
for(i =0 ;i< n;i++)
{
for(j =1;j<n-i;j++)
{
if(s[j-1] >s[j])
{
temp = s[j-1];
s[j-1] = s[j];
s[j] = temp;
}
}
}
}
//插入排序
//从第一个数开始,看看到它前面的人有没有人不按高矮顺序排队,如果有就a[j],a[j+1],换下,直到成有序区。
void insert_sort(int a[],int n)
{
int i,j;
for( i= 0;i<n;i++)
{
for(j=i-1;j>=0&&a[j]>a[j+1]; j--)
{
swap(&a[j],&a[j+1]);
}
}
}
//选择排序 每次从i+1到n,选一个比a[i]小的数,然后交换,这样就最小的数在最前面了,
//意思就是每次把一个最小的小朋友放到前面,这样就自然排好了
void choose_sort(int a[] ,int n)
{
int i,j,nMinIndex;
for(i =0;i<n;i++)
{
nMinIndex = i;
for(j =i+1;j<n;j++)
{
if(a[j]<a[nMinIndex])
nMinIndex = j;
swap(&a[i],&a[nMinIndex]);
}
}
}
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
void print(int a[])
{
int i;
for(i = 0;i< 10;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int a[10] ={9,6,5,3,2,1,78,10,7,44};
//quick_sort(a,0,9);
//insert_sort(a,10);
choose_sort(a,10);
print(a);
return 0;
}/*************************
几种常见的排序算法,
1,冒泡排序
2,