| 
 
| /* int arr[6] = {1,2,4,3,8,5};
 从大到小排列:
 思路:
 1 把最大值放在第一位。首先需要进行双层for循环进行操作;
 因为一层只能进行一次操作;
 2 采用数组下标计算最大值进行交换的方法。这样其他的数字就不需要变化。
 */
 
 #include <stdio.h>
 int arr[6] = {1,2,4,3,8,5};
 int main(int argc, const char * argv[]) {
 /*   //假定一个最大值 每次为数组的第一个元素
 int tempMax;
 int temp;
 for (int i=0; i<5; i++)
 {
 tempMax = i;
 for (int j=i+1;j<6;j++)
 {
 //arr[tempMax]如果用arr[i]来计算,则当他大于该数时,一直没有变化,因此用tempMax
 if (arr[tempMax]<arr[j])
 {
 tempMax = j;
 }
 
 
 }
 //printf("%d----->  tempMax\n",tempMax);
 //通过循环找到了最大值的下标则进行交换
 temp = arr[i];
 arr[i] = arr[tempMax];
 arr[tempMax] = temp;
 // printf("arr[%d]------%d\n",i,arr[i]);
 }
 for (int i=0;i<6;i++)
 {
 printf("%d\t",arr[i]);
 }
 printf("\n");
 */
 
 
 //冒泡排序算法   两两进行比较;
 /*
 思路:
 小数下沉,双层for循环
 第一层控制需要比较的次数
 第二层用于比较,大则上升 交换两个数字的位置,每次上升之后则可以少比一次。因为最后一个数字已经下沉了。
 */
 /*
 int change;
 for(int i=0;i<6-1;i++)//n-1次
 for(int j=0;j<6-1-i;j++)
 {
 if(arr[j]< arr[j+1])
 {
 change = arr[j];
 arr[j]= arr[j+1];
 arr[j+1] = change;
 }
 }
 
 for (int i=0;i<6;i++) {
 printf("%d\t",arr[i]);
 }
 printf("\n");
 */
 //选择排序 每次都把最大的数字放在第一位
 /*
 思路:
 1 双重循环for 因为每次都只能确认一个,所以需要双重
 2 固定首位 用外层for循环arr[i]  n-1次 里层循环控制
 */
 
 
 int temp;
 
 for (int i=0;i<6-1;i++) {
 for (int j=i+1/*因为外层已经确定了,所以内存只需要+1*/; j<6; j++) {
 if (arr[i]<arr[j]) {
 //交换 始终保持arr[i]为最大值;
 temp  = arr[i];
 arr[i] = arr[j];
 arr[j] = temp;
 }
 
 }
 }
 for (int i=0;i<6;i++) {
 printf("%d\t",arr[i]);
 }
 printf("\n");
 return 0;
 }
 
 | 
 |