国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言的冒泡排序和快速排序算法使用實例

2020-05-23 14:15:48
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C語言的冒泡排序和快速排序算法使用實例,示例題目也是ACM練習當中的基礎習題,需要的朋友可以參考下

冒泡排序法

題目描述:

用一維數組存儲學號和成績,然后,按成績排序輸出。

輸入:

輸入第一行包括一個整數N(1<=N<=100),代表學生的個數。

接下來的N行每行包括兩個整數p和q,分別代表每個學生的學號和成績。

輸出:

按照學生的成績從小到大進行排序,并將排序后的學生信息打印出來。

如果學生的成績相同,則按照學號的大小進行從小到大排序。

樣例輸入:

3

1 90

2 87

3 92

樣例輸出:

2 87

1 90

3 92

代碼:

 

 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.  
  4. struct student  
  5. {  
  6. int number;  
  7. int score;  
  8. };  
  9.  
  10. int main()  
  11. {  
  12. struct student students[101];  
  13. int n, i, j;  
  14. struct student temp;  
  15.  
  16. while(scanf("%d",&n) != EOF)  
  17. {  
  18. //接收數據  
  19. for(i = 0; i < n; i++)  
  20. {  
  21. scanf("%d%d",&students[i].number,&students[i].score);  
  22. }  
  23.  
  24. //冒泡排序  
  25. for(i = 0; i < n - 1; i ++)  
  26. {  
  27. for(j = 0; j < n - i - 1; j ++)  
  28. {  
  29. if(students[j].score > students[j + 1].score)  
  30. {  
  31. temp = students[j];  
  32. students[j] = students[j + 1];  
  33. students[j + 1] = temp;  
  34. }else if(students[j].score == students[j + 1].score)  
  35. {  
  36. if(students[j].number > students[j + 1].number)  
  37. {  
  38. temp = students[j];  
  39. students[j] = students[j + 1];  
  40. students[j + 1] = temp;  
  41. }  
  42. }  
  43. }  
  44. }  
  45.  
  46. //輸出排序結果  
  47. for(i = 0; i < n; i ++)  
  48. {  
  49. printf("%d %d/n",students[i].number,students[i].score);  
  50. }  
  51. }  
  52.  
  53. return 0;  
  54. }  

快速排序法

題目描述:

有N個學生的數據,將學生數據按成績高低排序,如果成績相同則按姓名字符的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,并輸出N個學生排序后的信息。

輸入:

測試數據有多組,每組輸入第一行有一個整數N(N<=1000),接下來的N行包括N個學生的數據。

每個學生的數據包括姓名(長度不超過100的字符串)、年齡(整形數)、成績(小于等于100的正數)。

輸出:

將學生信息按成績進行排序,成績相同的則按姓名的字母序進行排序。

然后輸出學生信息,按照如下格式:

姓名 年齡 成績

樣例輸入:

3

abc 20 99

bcd 19 97

bed 20 97

樣例輸出:

bcd 19 97

bed 20 97

abc 20 99

代碼

 

 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4.  
  5. struct student{  
  6. char name[101];  
  7. int age;  
  8. int grade;  
  9. };  
  10.  
  11. int partition(struct student *A, int left, int right);  
  12. void quicksort(struct student *A, int begin, int end);  
  13.  
  14. int main()  
  15. {  
  16. struct student students[1001];  
  17. int i, n;  
  18.  
  19. while(scanf("%d",&n) != EOF)  
  20. {  
  21. //學生成績賦值  
  22. for(i = 0; i < n; i ++)  
  23. {  
  24. scanf("%s%d%d",students[i].name, &students[i].age, &students[i].grade);  
  25. }  
  26.  
  27. //快速排序  
  28. quicksort(students, 0, n-1);  
  29.  
  30. //打印輸出  
  31. for(i = 0; i < n; i ++)  
  32. {  
  33. printf("%s %d %d/n",students[i].name, students[i].age, students[i].grade);  
  34. }  
  35. }  
  36.  
  37. return 0;  
  38. }  
  39.  
  40. void quicksort(struct student *A, int begin, int end)  
  41. {  
  42. int pivot;  
  43.  
  44. if(begin < end)  
  45. {  
  46. pivot = partition(A, begin, end);  
  47. quicksort(A, begin, pivot - 1);  
  48. quicksort(A, pivot + 1, end);  
  49. }  
  50. }  
  51.  
  52. int partition(struct student *A, int left, int right)  
  53. {  
  54. struct student stand = A[left];  
  55.  
  56. while(left < right)  
  57. {  
  58. while(left < right && (A[right].grade > stand.grade || (A[right].grade == stand.grade && strcmp(A[right].name,stand.name) > 0) || (A[right].grade == stand.grade && strcmp(A[right].name,stand.name) == 0 && A[right].age > stand.age ) ) )  
  59. {  
  60. right --;  
  61. }  
  62. if(left < right)  
  63. {  
  64. A[left ++] = A[right];  
  65. }  
  66.  
  67. while(left < right && (A[left].grade < stand.grade || (A[left].grade == stand.grade && strcmp(A[left].name,stand.name) < 0) || (A[left].grade == stand.grade && strcmp(A[left].name,stand.name) == 0 && A[left].age < stand.age ) ) )  
  68. {  
  69. left ++;  
  70. }  
  71. if(left < right)  
  72. {  
  73. A[right --] = A[left];  
  74. }  
  75. }  
  76. A[left] = stand;  
  77. return left;  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 包头市| 九龙城区| 广灵县| 汉寿县| 正安县| 阳江市| 甘孜县| 沽源县| 谷城县| 扎鲁特旗| 大宁县| 乐昌市| 霞浦县| 泸定县| 丹凤县| 桓仁| 兴城市| 凤阳县| 奈曼旗| 龙门县| 长寿区| 青神县| 宁武县| 琼中| 鱼台县| 阿克苏市| 萍乡市| 永川市| 广东省| 炉霍县| 咸阳市| 焉耆| 阳新县| 长泰县| 桂林市| 淮南市| 呼和浩特市| 于都县| 沁水县| 垦利县| 梁平县|