C语言小白学习整理五大常用的排序方法:选择排序、冒泡排序、插入排序、希尔排序、快速排序。在此做个笔记,也欢迎大家参考治指正。
#include <stdio.h>
#define SIZE_NUM 8 /*数组长度 */
/*换位函数*/
void Swap(int* num1, int* num2){
int midValue = 0;
midValue = *num1;
*num1 = *num2;
*num2 = midValue;
}
/*选择排序*/
void Select_Sort(int* s , int n){
int i, j;
for(i = 0; i < n-1; i++)
for(j = i+1; j < n; j++)
if(s[i] > s[j])
Swap(&s[i],&s[j]);
}
/*冒泡排序*/
void MaoPao_Sort(int* s, int n){
int i, j;
for(i = 0; i < n-1; i++)
for(j = 0; j < n-i-1; j++)
if(s[j] > s[j+1])
Swap(&s[j],&s[j+1]);
}
/*插入排序*/
void Insert_Sort(int* s, int n){
int i, j, midValue;
for(i = 1; i < n; i++){
midValue = s[i];
j = i-1;
while(midValue < s[j] && j >= 0){
s[j+1] = s[j];
j--;
}
s[j+1] = midValue;
}
}
/*希尔排序*/
void Shell_Sort(int* s, int n){
int i, j, gap;
for(gap = n/2; gap > 0; gap/=2){
for(i = gap; i < n; i++)
for (j = i - gap; j >= 0 && s[j] > s[j+gap]; j -= gap)
Swap(&s[j],&s[j+gap]);
}
}
/*快速排序*/
void Quick_Sort(int *s , int left, int right){
if(left < right){
int i = left, j = right;
int mid = s[i];
while(i < j){
while(mid < s[j] && j > left)
j--;
if(i < j)
s[i++] = s[j];
while(mid > s[i] && i < right)
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = mid;
Quick_Sort(s, left, i);
Quick_Sort(s, i, right);
}
}
int main(){
int Num_Group[SIZE_NUM];
printf("enter 8 numbers:");
for(int i = 0; i < SIZE_NUM; i++)
scanf("%d",&Num_Group[i]);
for(int i = 0; i < SIZE_NUM; i++)
printf("%5d",Num_Group[i]);
//Select_Sort(Num_Group, SIZE_NUM);
//MaoPao_Sort(Num_Group, SIZE_NUM);
//Insert_Sort(Num_Group, SIZE_NUM);
//ShellSort(Num_Group, SIZE_NUM);
//Quick_Sort(Num_Group, 0, SIZE_NUM);
printf("\n atfter sorted:\n");
for(int i = 0; i < SIZE_NUM; i++)
printf("%5d",Num_Group[i]);
return 0;
}