排序的几种方法-----分几个函数分装,简单易懂

1、简单的选择排序:
选择排序是先找到数组中最大的元素,让后将最大的元素放在数组的
最后,之后再剩下的数组中继续找最大的再放在剩下元素的最后一位,每次向前缩进一位
实例:亲测好用
/****************************************************************/
int FindselectPos_wjj(int arr[], int n)
{
int i;
int pos = 0;
int Max = arr[0];
for (i = 0; i < n; i++)
{
if (arr[i] > Max)
{
Max = arr[i]; // 这里找到最大的元素
pos = i; //这里找到最大的元素下标
}
}
return pos;

}
void Select_Sorting_wjj(int arr[], int n)
{

while (n > 1)
{
	int pos =  FindselectPos_wjj(arr, n);
	int temp = 0;               //这个是数组中最大的元素
	temp = arr[pos];
	arr[pos] = arr[n-1];    //最后一个元素的值和最大交换
	arr[n-1] = temp;
	n--;
}
return;

}

int Select_Sorting_print_wjj()
{
int arr[5] = {3,4,2,1,9};
int i = 0;
Select_Sorting_wjj(arr, 5);

for (i = 0; i < 5; i++)
{
	printf("%d ", arr[i]);   //验证是OK的
}

return 0;

}
void main()
{
Select_Sorting_print_wjj();
return;
}
//
2、冒泡排序
实例:亲测好用
/
/
void bubble_sort1_wjj(int arry[], int n)
{
int i = 0;
int temp = 0;
for (i = 0; i < n-1; i++)
{
if (arry[i] < arry[i+1])
{
temp = arry[i];
arry[i] = arry[i+1];
arry[i+1] = temp;
}

}

return;

}

void bubble_sort2_wjj(int arr[], int n)
{
int i;
for (i = n; i >= 1; i–)
{
bubble_sort1_wjj(arr, i);
}

return;

}

void bubble_sort3_wjj()
{
int i;
int arry[5] = {3,4,2,1,9};
bubble_sort2_wjj(arry, 5);
for (i = 0; i < 5; i++)
{
printf("%d \n", arry[i]);
}

return;

}

void main()
{
bubble_sort3_wjj();
return;
}
/****************************************************************/

3、插入排序(说明看不明白,直接看代码)
插入排序就是找到数组中已经排好顺序的和没有排好顺序的元素两部分(例如:【1,2,3前面的123是排好顺序的------- 8,4,9,这个849是没有排好顺序的】),每次将未排好顺序的一个元素kEY(8)和已经排好顺序的最后一个元素b(3)比较(【1 2 3 8】),如果kEY大于它前面的一个元素就将b放在kEY位置,继续使用kEY和前的一个比较,如果KEY一直都没有相比较的大,就将和KEY比较的元素放在这个位置,一直到遇到比KEY小的元素就将KEY值放在这里(相当于把KEY值拿出来最后在放)
实例:亲测好用
/****************************************************************/
int Insert_wjj(int arr[], int n)
{
int key = arr[n];
int i = n;
while (arr[i-1] > key) //每次都是使用数组最后一个元素和前面的比较,即将最后一个元素单独拿出来,最后在放在比他小的哪个位置
{
arr[i] = arr[i - 1]; //如果最后一个数大于前一个则将最后一个放在前面的一个位置上
i–;
if (i == 0) //这里放置越界
{
break;
}
}
arr[i] = key;

return 0;

}

int InsertSort_wjj(int arr[], int n)
{
int i;
for (i = 1; i < n; i++) //这里是将第一个元素作为已经排好序的一部分,当然一个数字肯定是排序好的
{
Insert_wjj(arr, i);
}
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
int InsertSortPrint_wjj()
{
int arr[5] = {3,4,2,1,9};
InsertSort_wjj(arr, 5);
return 0;
}

void main()
{
(void)InsertSortPrint_wjj();
}

/****************************************************************/

你可能感兴趣的:(嵌入式C语言,C语言排序)