C++和Java實現基本的選擇排序和常見錯誤
一、選擇排序的基本思想:
首先,找到數組中最小的元素,其次將它和數組第一個元素交換位置(如果第一個元素就是最小元素則和自己交換),然後在剩下的元素中找到最小的元素,將它與數組第二個元素交換位置。如此迴圈,直到將整個數組排序。這種方法叫做選擇排序。
對於長度為N的數組,選擇排序需要大約N^2/2次比較和N次交換
C++代碼實現:
#include<iostream>
using namespace std;
template<typename T>
void selectionSort(T a[],int N) {
for (int i = 0; i < N; i++) {
int min = i;
for (int j = i + 1; j < N; j++)
if (a[min] > a[j])
min = j;
swap(a[i],a[min]);
}
}
int main() {
int arr[10] = { 10,5,2,6,3,4,7,9,8,1 };
selectionSort(arr,10);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
system("pause");
}
Java代碼實現:
package selectionsort;
public class SelectionSort {
public static void selectionSort(Comparable[] a){
int N=a.length;
for(int i=0;i<N;i++){
int min=i;
for(int j=i+1;j<N;j++)
if(less(a[j],a[min]))
min=j;
exch(a,i,min);
}
}
private static boolean less(Comparable v,Comparable w){
return v.compareTo(w)<0;
}
private static void exch(Comparable[] a,int i,int j){
Comparable t=a[i];a[i]=a[j];a[j]=t;
}
public static void main(String[] args) {
Integer[] arr = {4,7,8,3,9,5,6,1,2};
SelectionSort.selectionSort(arr);
for( int i = 0 ; i <arr.length ; i ++ ){
System.out.print(arr[i]);
System.out.print(' ');
}
}
}
二、常見錯誤
問題描述:運行完程式後發現第一個元素與第二個元素沒有排好序。如
解決:對於代碼selectionSort方法中,if判斷語句不要嵌套進第二個for迴圈中。
因為第二個for迴圈是為了尋找與i交換位置的元素,要迴圈找到後,才能判斷它與i的大小關係。
本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151412.htm