[关闭]
@chawuciren 2018-10-17T23:53:48.000000Z 字数 1533 阅读 564

各种排序

CSI


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void BubbleSort(int a[], int len);//冒泡
  4. void InsertionSort(int a[], int len);//插入
  5. void SeletSort(int a[], int len);//选择
  6. void fast(int a[],int len);//快排
  7. void mertsort(int a[],int len;int left[],int Left,int right[],int Right);//归并
  8. int main(void)
  9. {
  10. int a[8]={2,69,83,66,77,88,56,98};//一个数组
  11. InsertionSort(a,8);//调用函数
  12. for(int i = 0; i < 8; i++)//循环输出
  13. {
  14. printf("%d\n", a[i]);
  15. }
  16. return 0;
  17. }
  18. //冒泡排序
  19. void BubbleSort(int a[], int len)
  20. {
  21. int i=0;
  22. int j=0;
  23. int key=1;//用于替换
  24. for(i = 0 ; i < len - 1 ; i++)
  25. {
  26. for(j = 0 ; j < len - i - 1 ; j++)
  27. if(a[j] > a[j+1])//比较a[j]和a[j+1],大的向上交换,直到这一次全部比完。然后i+1,比较下一次
  28. {
  29. key = a[j];
  30. a[j] = a[j+1];
  31. a[j+1] = key;
  32. }
  33. }
  34. return;
  35. }
  36. //选择排序
  37. void SelectionSort(int a[],int len){
  38. int i,j;
  39. for(i = 0 ; i < len-1 ; i++){
  40. int min_index = i; //存储最小值
  41. for(j = i + 1 ; j < len; j++)
  42. if(a[ min_index ] > a[j])//选出最小值
  43. min_index = j;
  44. if(min_index != i){
  45. int temp = a[i]; //若当前比较的a[i]>最小值,进行交换
  46. a[i] = a[min_index];
  47. a[min_index] = temp;
  48. }
  49. }
  50. }
  51. //插入排序
  52. int InsertionSort(int a[],int len){
  53. int key=0;//用于交换
  54. for(int i=0;i<len-1;i++){
  55. int j=i;
  56. do{
  57. if(a[j]>a[j+1]){ //假设a[j]已排好,a[j]与a[j+1],若a[j+1]大于前一位,交换,否则不交换。若还有更前一位,再比较。
  58. key=a[j];
  59. a[j]=a[j+1];
  60. a[j+1]=key;
  61. }
  62. j-=1; //j=j-1,若前一位存在,比较前一位
  63. } while(j>=0);
  64. }
  65. return ;
  66. }

快速排序

  1. void fast(int a[],int len){
  2. int k=a[0];//将a[0]作为中间值
  3. int i=0;
  4. int j=len;
  5. int key=0;
  6. do{
  7. for(j=len;j>0;j--){//从后往前找比他xiaode
  8. if(a[j]<k){
  9. key=a[i];
  10. a[i]=a[j];
  11. a[j]=a[i];
  12. }
  13. return ;
  14. }
  15. for(i=0;i<len;i++){//从前往后找比他大的
  16. if(a[i]>k){
  17. key=a[j];
  18. a[j]=a[i];
  19. a[i]=key;
  20. }
  21. }
  22. }while(i!=j);//直到i==j
  23. return 0;
  24. }

归并排序

  1. void mertsort(int a[],int len;int left[],int Left,int right[],int Right){
  2. for(int k=0;k<len;k++){
  3. if(left[j]<right[i]){//假如左数组的元素小,把他放入原数组
  4. a[k]=left[j];
  5. j+=1;
  6. }
  7. else{
  8. a[k]=right[i]//假如右数组的元素小,把他放入原数组
  9. i+=1;
  10. }
  11. }
  12. return ;
  13. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注