主要思想

把数往后放
从大到小的话,就把小的放后面
从小到大的话,就把大的放后面

图示

方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//为什么从1开始?
//因为我已经将 index = 0 了
for(int i = 1; i < 10; i++)
{
int index = 0;
//因为是最后一个数,要加 = 号噢
for(int j = 1; j <= 10 - i; j++)
{
//找到每轮最值的索引
if(arr[j] < arr[index])
index = j;
}
//与最后的数交换
temp = arr[index];
arr[index] = arr[10 - i];
arr[10 - i] = temp;
}
printf("从大到小:\n");
for(int i = 0; i < 10; i++)
printf("%d ", arr[i]);

return 0;
}

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package 直接选择排序;

public class 直接选择排序 {
public static void main(String[] args) {
int arr[] = new int[] {25, 22, 30, 04, 13};
int temp;

for (int i = 1; i < arr.length; i++) {//表明找最大值多少次(第一个元素不用理会)
int index = 0; //最大值的索引
//找数组最大值索引的办法
for (int j = 1; j <= arr.length - i; j++) {//遍历(排除已经找到最大值的)数组,找最大
if (arr[j] > arr[index]) {//查找数组中的每一个元素,是否比索引的值的大
index = j; //大就让索引等于它的下标,
}
}
//把最大的数放在最后面(与最后的元素交换)
temp = arr[index];
arr[index] = arr[arr.length - i];
arr[arr.length - i] = temp;
}
for (int a : arr)
System.out.print(a + " ");
}

}
  • 一样,要想从大到小只需改变if语句的符号