1、数组存储
/**
* 选择排序
* @param array
* @return
*/
public static int[] selectionSort(int[] array) {
if (array.length == 0)
return array;
for (int i = 0; i < array.length; i++) {
int minIndex = i;
for (int j = i; j < array.length; j++) {
if (array[j] < array[minIndex]) //找到最小的数
minIndex = j; //将最小数的索引保存
}
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
return array;
}
2、单链表存储
LinkList sortList(LinkList L) {
LinkNode* p = L->next;
LinkNode* q;
LinkNode* min;
int temp;
while (p)
{
min = p;//有序序列中的最后位置元素节点
q = p->next;
while (q)
{
if (min->data > q->data)min=q;
q = q->next;//寻找无序序列中的最小值节点
}
if (min!= p) {//交换data值
temp = min->data;
min->data = p->data;
p->data = temp;
}
p = p->next;
}
return L;
}
3、递归方法
void SelectSort(int *array,int n)
{
int i,j,temp;
if(n == 1)
return ;
j = 0;
for(i = 0;i < n;++i)
if(array[i] < array[j])
j = i;
temp = array[0];//这个array并不总是原来数组的第一个,而是未排序的部分第一个
array[0] = array[j];
array[j] = temp;
SelectSort(array+1,n-1);
}