生活随笔
收集整理的這篇文章主要介紹了
常见排序总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冒泡
#include <stdio.h>void bubble_sort(int array
[], int length
);void bubble_sort(int array
[], int length
)
{int i
, j
, temp
;for (i
= 0; i
< length
- 1; i
++){for (j
= 0; j
< length
- 1 - i
; j
++){if (array
[j
] > array
[j
+ 1]){temp
= array
[j
];array
[j
] = array
[j
+ 1];array
[j
+ 1] = temp
;}}}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);bubble_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
快排
#include <stdio.h>void quick_sort(int array
[], int left
, int right
);void quick_sort(int array
[], int left
, int right
)
{int i
= left
, j
= right
;int temp
;int pivot
;pivot
= array
[(left
+ right
) / 2];while (i
<= j
){while (array
[i
] < pivot
){i
++;}while (array
[j
] > pivot
){j
--;}if (i
<= j
){temp
= array
[i
];array
[i
] = array
[j
];array
[j
] = temp
;i
++;j
--;}}if (left
< j
){quick_sort(array
, left
, j
);}if (i
< right
){quick_sort(array
, i
, right
);}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);quick_sort(array
, 0, length
- 1);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
計數排序:
#include <stdio.h>
#include <stdlib.h>void counting_sort(int array
[], int length
);void counting_sort(int array
[], int length
)
{int i
, max
;int* buffer
= NULL;int* sorted
= NULL;max
= array
[0];for (i
= 1; i
< length
; i
++){if (array
[i
] > max
){max
= array
[i
];}}buffer
= (int*)malloc((max
+ 1) * sizeof(int));for (i
= 0; i
< max
+ 1; i
++){buffer
[i
] = 0;}for (i
= 0; i
< length
; i
++){buffer
[array
[i
]]++;}for (i
= 1; i
< max
+ 1; i
++){buffer
[i
] += buffer
[i
- 1];}sorted
= (int*)malloc(length
* sizeof(int));for (i
= length
; i
> 0; i
--){sorted
[--buffer
[array
[i
- 1]]] = array
[i
- 1];}for (i
= 0; i
< length
; i
++){array
[i
] = sorted
[i
];}free(buffer
);free(sorted
);
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);counting_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
插入排序
#include <stdio.h>void insertion_sort(int array
[], int length
);void insertion_sort(int array
[], int length
)
{int i
, j
, temp
;for (i
= 1; i
< length
; i
++){temp
= array
[i
];j
= i
- 1;for (; j
>= 0 && array
[j
] > temp
; j
--){array
[j
+ 1] = array
[j
];}array
[j
+ 1] = temp
;}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);insertion_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
選擇排序
#include <stdio.h>void selection_sort(int array
[], int length
);void selection_sort(int array
[], int length
)
{int i
, j
, min
, temp
;for (i
= 0; i
< length
- 1; i
++){min
= i
;for (j
= i
+ 1; j
< length
; j
++){if (array
[min
] > array
[j
]){min
= j
;}}temp
= array
[min
];array
[min
] = array
[i
];array
[i
] = temp
;}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);selection_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
希爾排序
#include <stdio.h>void shell_sort(int array
[], int length
);void shell_sort(int array
[], int length
)
{int i
, j
, step
, temp
;for (step
= length
/ 2; step
> 0; step
/= 2){for (i
= step
; i
< length
; i
++){temp
= array
[i
];for (j
= i
- step
; j
>= 0 && array
[j
] > temp
; j
-= step
){array
[j
+ step
] = array
[j
];}array
[j
+ step
] = temp
;}}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);shell_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
歸并排序
#include <stdio.h>void merge_sort(int array
[], int length
);
void merge_sort_recursive(int array
[], int reg
[], int start
, int end
);void merge_sort_recursive(int array
[], int reg
[], int start
, int end
)
{if (start
>= end
){return;}int k
= start
;int length
= end
- start
;int mid
= (length
/ 2) + start
;int start1
= start
, end1
= mid
;int start2
= mid
+ 1, end2
= end
;merge_sort_recursive(array
, reg
, start1
, end1
);merge_sort_recursive(array
, reg
, start2
, end2
);while (start1
<= end1
&& start2
<= end2
){reg
[k
++] = array
[start1
] < array
[start2
] ? array
[start1
++] : array
[start2
++];}while (start1
<= end1
){reg
[k
++] = array
[start1
++];}while (start2
<= end2
){reg
[k
++] = array
[start2
++];}for (k
= start
; k
<= end
; k
++){array
[k
] = reg
[k
];}
}void merge_sort(int array
[], int length
)
{int reg
[14];merge_sort_recursive(array
, reg
, 0, length
- 1);
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);merge_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
雞尾酒排序
#include <stdio.h>void cocktail_sort(int array
[], int length
);void cocktail_sort(int array
[], int length
)
{int i
, left
= 0, right
= length
- 1;int temp
;while (left
< right
){for (i
= left
; i
< right
; i
++){if (array
[i
] > array
[i
+ 1]){temp
= array
[i
];array
[i
] = array
[i
+ 1];array
[i
+ 1] = temp
;}}right
--;for (i
= right
; i
> left
; i
--){if (array
[i
- 1] > array
[i
]){temp
= array
[i
];array
[i
] = array
[i
- 1];array
[i
- 1] = temp
;}}left
++;}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);cocktail_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
桶排序
#include <stdio.h>
#include <stdlib.h>int* add_item(int* array
, int count
, int item
);
void bucket_sort(int array
[], int length
);struct Bucket
{int* data
;int count
;
};int* add_item(int* array
, int count
, int item
)
{int* newArray
= (int*)malloc(sizeof(int) * (count
+ 1));int i
;for (i
= 0; i
< count
; i
++){newArray
[i
] = array
[i
];}newArray
[count
] = item
;return newArray
;
}void bucket_sort(int array
[], int length
)
{int min
= array
[0];int max
= array
[0];int i
, j
, k
, cap
, size
;struct Bucket
* bucket
= NULL;struct Bucket b
;for (i
= 1; i
< length
; i
++){if (array
[i
] > max
){max
= array
[i
];}if (array
[i
] < min
){min
= array
[i
];}}cap
= max
- min
+ 1;bucket
= (struct Bucket
*)malloc(sizeof(struct Bucket
) * cap
);for (i
= 0; i
< cap
; i
++){bucket
[i
] = *(struct Bucket
*)malloc(sizeof(struct Bucket
));}for (i
= 0; i
< length
; i
++){b
= bucket
[array
[i
] - min
];if (b
.count
< 0){b
.count
= 0;}bucket
[array
[i
] - min
].data
= add_item(b
.data
, b
.count
++, array
[i
]);bucket
[array
[i
] - min
].count
= b
.count
;}for (i
= 0, k
= 0; i
< cap
; i
++){size
= bucket
[i
].count
;if (size
> 0){for (j
= 0; j
< size
; j
++){array
[k
] = bucket
[i
].data
[j
];k
++;}}}
}int main(void)
{int array
[] = { 73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109 };int i
, length
;length
= sizeof(array
) / sizeof(array
[0]);bucket_sort(array
, length
);printf("排序后的結果是:");for (i
= 0; i
< length
; i
++){printf("%d ", array
[i
]);}putchar('\n');return 0;
}
心形 圖案
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define I 20
#define R 340
int main()
{int i
, j
, e
;int a
;long time
;system("title 尋夢SSS");for (i
= 1, a
= I
; i
< I
/ 2; i
++, a
--){for (j
= (int)(I
- sqrt(I
* I
- (a
- i
) * (a
- i
))); j
> 0; j
--)printf(" ");for (e
= 1; e
<= 2 * sqrt(I
* I
- (a
- i
) * (a
- i
)); e
++)printf("\3");for (j
= (int)(2 * (I
- sqrt(I
* I
- (a
- i
) * (a
- i
)))); j
> 0; j
--)printf(" ");for (e
= 1; e
<= 2 * sqrt(I
* I
- (a
- i
) * (a
- i
)); e
++)printf("\3");printf("\n");}for (i
= 1; i
< 80; i
++){if (i
== 25){printf(" 一路向前沖沖沖!!!!!!!");i
+= 30;}printf("\3");}printf("\n");for (i
= 1; i
<= R
/ 2; i
++){if (i
% 2 || i
% 3)continue;for (j
= (int)(R
- sqrt(R
* R
- i
* i
)); j
> 0; j
--)printf(" ");for (e
= 1; e
<= 2 * (sqrt(R
* R
- i
* i
) - (R
- 2 * I
)); e
++)printf("\3");printf("\n");}for (; ; ){system("color a");for (time
= 0; time
< 99999999; time
++); system("color b");for (time
= 0; time
< 99999999; time
++); system("color c");for (time
= 0; time
< 99999999; time
++); system("color d");for (time
= 0; time
< 99999999; time
++); system("color e");for (time
= 0; time
< 99999999; time
++); system("color f");for (time
= 0; time
< 99999999; time
++);system("color 0"); for (time
= 0; time
< 99999999; time
++);system("color 1"); for (time
= 0; time
< 99999999; time
++);system("color 2"); for (time
= 0; time
< 99999999; time
++);system("color 3"); for (time
= 0; time
< 99999999; time
++);system("color 4");for (time
= 0; time
< 99999999; time
++); system("color 5");for (time
= 0; time
< 99999999; time
++); system("color 6");for (time
= 0; time
< 99999999; time
++); system("color 7");for (time
= 0; time
< 99999999; time
++); system("color 8");for (time
= 0; time
< 99999999; time
++); system("color 9");for (time
= 0; time
< 99999999; time
++); system("color ab");for (time
= 0; time
< 99999999; time
++); system("color ac");for (time
= 0; time
< 99999999; time
++); system("color ad");for (time
= 0; time
< 99999999; time
++); system("color ae");for (time
= 0; time
< 99999999; time
++); system("color af");for (time
= 0; time
< 99999999; time
++);}return 0;
}
總結
以上是生活随笔為你收集整理的常见排序总结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。