1、冒泡排序: 和快速排序一样属于交换排序的一种
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
int generate_array(char *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int sort(char *array){
int i=0;
int j=0;
unsigned tmp;
for(i=0;i<LEN-1;i++){
for(j=0;j<LEN-i-1;j++){
if(array[j]>array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] =tmp;
}
}
}
for(i=0;i<LEN;i++){
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int main(void){
int num[LEN];
generate_array(num);
sort(num);
return 0;
}
2、插入排序
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
int print_num(char *array){
int i=0;
for(i=0;i<LEN;i++){
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int generate_array(char *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
}
print_num(array);
return 0;
}
int sort(char *array){
int i=0;
int j=0;
unsigned tmp;
for(i=1;i<LEN;i++){
tmp = array[i];
for(j=i;j>0 && array[j-1]>tmp;j--){
array[j]=array[j-1];
}
array[j]=tmp;
}
print_num(array);
return 0;
}
int main(void){
int num[LEN];
generate_array(num);
sort(num);
return 0;
}
3、归并排序:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
int is1[LEN],is2[LEN];
int generate_array(int *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
void merge(int low,int mid,int high){
int i=low,j=mid+1,k=low;
while(i<=mid&&j<=high)
if(is1[i]<=is1[j]) //
is2[k++]=is1[i++];
else
is2[k++]=is1[j++];
while(i<=mid)
is2[k++]=is1[i++];
while(j<=high)
is2[k++]=is1[j++];
for(i=low;i<=high;i++)//
is1[i]=is2[i];
}
void mergeSort(int a,int b)//
{
if(a<b){
int mid=(a+b)/2;
mergeSort(a,mid);
mergeSort(mid+1,b);
merge(a,mid,b);
}
}
void main(void){
generate_array(is1);
mergeSort(0,LEN-1);
int i=0;
for(i=0;i<LEN;i++){
printf("%d ",is1[i]);
}
printf("\n");
for(i=0;i < LEN;i++){
printf("%d ",is2[i]);
}
printf("\n");
}
4、希尔排序:插入排序的一种实现
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
void shellsort(int *a,int n)
{
int k = n/2;
while(k>0){
printf("k=%d\n ",k);
int i =0;
for(i = k;i< n;i++){
int t = a[i];
#if 1
int j;
for(j = i;j >= k && t < a[j - k];j -= k)
a[j] = a[j - k];
a[j] = t;
#endif
#if 0
int j = i - k;
while(j >= 0 && t < a[j])
{
a[j+k] = a[j];
//a[j] = t;
j = j - k;
}
a[j + k] = t;
#endif
}
k /= 2;
}
}
int generate_array(int *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int main(void){
int num[LEN];
generate_array(num);
shellsort(num,LEN);
int i=0;
for(i=0;i<LEN;i++){
printf("%d ",num[i]);
}
printf("\n ");
return 0;
}
5、选择排序:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
int generate_array(int *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
void select_sort(int *a, int n)
{
register int i, j, min, t;
for(i = 0; i < n - 1; i ++)
{
min = i;
for(j = i + 1; j < n; j ++)
if(a[min] > a[j])
min = j;
if(min != i)
{
t = a[min];
a[min] = a[i];
a[i] = t;
}
}
}
int main(void){
int num[LEN];
generate_array(num);
select_sort(num,LEN);
int i;
for(i=0;i<LEN;i++)
printf("%d ",num[i]);
printf("\n");
return 0;
}
6、快速排序:是对冒泡排序的改进
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define LEN 10
int generate_array(int *array){
int i=0;
srand((unsigned)time(NULL));
for(i=0;i<LEN;i++){
array[i]=rand()%100;
printf("%d ",array[i]);
}
printf("\n");
return 0;
}
int sort_quick(int *array,int l,int r){
if(l>=r)
return 1;
int pos = array[l];
int i = l,j = r;
while(i<j){
while(i<j && array[j]>pos)
j--;
if(i<j){
array[i]=array[j];
i++;
}
while(i<j && array[i]<pos)
i++;
if(i<j){
array[j]=array[i];
j--;
}
}
array[i]=pos;
sort_quick(array,l,i-1);
sort_quick(array,i+1,r);
return 1;
}
int main(){
int num[LEN];
generate_array(num);
sort_quick(num,0,9);
int i;
for(i=0;i<LEN;i++){
printf("%d ",num[i]);
}
printf("\n");
return 0;
}