1.冒泡排序
#include<stdio.h>
void sort_bubble(int arr[],int length){
for(int i=0;i<length;i++){
printf("before times sort: %d\n",i);
for(int k = 0 ;k<length;k++){
printf("%d\n", arr[k]);
}
for(int j=0;j<length-i-1;j++){
int tmp;
if(arr[j] < arr[j+1]){
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
printf("after times sort: %d\n",i);
for(int k = 0 ;k<length;k++){
printf("%d\n", arr[k]);
}
}
}
int main(){
int arr[5] = {13,2,4,3,14};
int length = sizeof(arr)/sizeof(arr[0]);
printf("start: \n");
for(int k = 0 ;k<length;k++){
printf("%d\n", arr[k]);
}
sort_bubble(arr,length);
printf("result:\n");
for(int i = 0 ;i<length;i++){
printf("%d\n", arr[i]);
}
return 0;
}
2.快速排序
#include<stdio.h>
#include<stdlib.h>
int* sort_fast(int arr[],int length){
if(length <= 1){
return arr;
}
int left_num = 0;
int right_num = 0;
for(int i=1;i<length;i++){
//arr[0] 为基准数字
if(arr[0] > arr[i]){
left_num ++;
}else{
right_num ++;
}
}
int *left_arr,*right_arr;
left_arr = (int*)malloc(sizeof(int)*left_num);
//left_arr = (int*)calloc(left_num,sizeof(int));
right_arr = (int*)malloc(sizeof(int)*right_num);
//right_arr = (int*)calloc(right_num,sizeof(int));
int j=0,k=0;
int base_num = arr[0];
printf("sort start... length %d base_num %d\n",length,base_num);
for(int i=1;i<length;i++){
if(base_num > arr[i]){
left_arr[j++] = arr[i];
printf("left %d\n", arr[i]);
}else{
right_arr[k++] = arr[i];
printf("right %d\n", arr[i]);
}
}
left_arr = sort_fast(left_arr,left_num);
right_arr = sort_fast(right_arr,right_num);
int *total_arr;
int total_num = left_num+right_num;
total_arr = (int*)malloc(sizeof(int)*total_num);
int index = 0;
for(int i=0;i<left_num;i++){
total_arr[index++] = left_arr[i];
}
printf("left_num %d\n", index);
printf("base_num %d\n", base_num);
total_arr[index++] = base_num;
for(int i=0;i<right_num;i++){
total_arr[index++] = right_arr[i];
}
free(left_arr);
free(right_arr);
printf("finnal...\n");
for(int i=0;i<length;i++){
printf("%d\n", total_arr[i]);
}
return total_arr;
}
int main(){
int arr[5] = {13,2,4,3,14};
int length = sizeof(arr)/sizeof(arr[0]);
printf("start: \n");
for(int k = 0 ;k<length;k++){
printf("%d\n", arr[k]);
}
int *new_arr = (int*)malloc(sizeof(int)*length);
new_arr = sort_fast(arr,length);
printf("result:\n");
for(int i = 0 ;i<length;i++){
printf("%d\n", new_arr[i]);
}
return 0;
}
3.归并排序
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void merge(int arr[],int left,int mid,int right){
int *tmp_arr;
int tmp_num = right - left + 1;
tmp_arr = (int*)malloc(sizeof(int)*tmp_num);
int i=left,j=mid+1,k=0;
while(i<=mid && j<=right){
if(arr[i] < arr[j]){
tmp_arr[k++] = arr[i++];
}else{
tmp_arr[k++] = arr[j++];
}
}
while(i<=mid){
tmp_arr[k++] = arr[i++];
}
while(j<=right){
tmp_arr[k++] = arr[j++];
}
printf("sort after... left %d mid %d right %d\n",left,mid,right);
for(i=left,j=0;i<=right;i++,j++){
arr[i] = tmp_arr[j];
printf("%d\n", arr[i]);
}
free(tmp_arr);
}
void sort_merge(int arr[],int left,int right){
if(left < right){
int mid;
mid = floor((left+right)/2);
printf("sort start... left %d mid %d right %d\n",left,mid,right);
for(int i=left;i<=right;i++){
printf("%d\n", arr[i]);
}
sort_merge(arr,left,mid);
sort_merge(arr,mid+1,right);
merge(arr,left,mid,right);
}
}
int main(){
int arr[5] = {13,2,4,3,14};
int length = sizeof(arr)/sizeof(arr[0]);
printf("start: \n");
for(int k = 0 ;k<length;k++){
printf("%d\n", arr[k]);
}
sort_merge(arr,0,length - 1);
printf("result:\n");
for(int i = 0 ;i<length;i++){
printf("%d\n", arr[i]);
}
return 0;
}