天天看點

三種簡單排序方式的總結

三種簡單的排序通常是指:直接插入排序、冒泡排序、簡單選擇排序,這三種方式排序效率都非常的低是以稱他們為簡單排序(思路最簡單)。

直接插入排序的思路:先把待排序列分為有序序列和無序序列,初始化時第一個元素為有序元素,排序時每次從無序序列中取第一個元素,查找其在有序序列中的位置,由于是有序序列隻要找到第一個比它小的元素就找到了其位置。關鍵部分代碼:

for(int i=1;i<n;i++){
	temp = a[i];
	j = i-1;

	while(j>=0 && a[j] > temp){
		a[j+1] = a[j];
		j--;
	}

	a[j+1] = temp;
}
           

冒泡排序:冒泡排序首先從思路上有三種1.下沉2起泡3.雙端冒泡。下沉法每次都能選中一個最大的元素并且确定其最終的位置,起泡法每次都能選中一個最小的元素确定其位置,雙端冒泡的方法每次都能選出一個最大的和一個最小的并确定其最終的位置。

關鍵部分代碼如下:

for(int i=0;i<n;i++){	
	//下沉
	int j = 0;,k = n-1;
	while(j < n){
		if(a[j] > a[j+1]){
			int temp = a[j];
			a[j] = a[j+1];
			a[j+1] = temp;
		}
		j++;
	}//下沉

	//氣泡

	while(k>0){
		if(a[k] < a[k-1]){
			int temp = a[k];
			a[k] = a[k-1];
			a[k-1] = temp;
		}
		k--;
	}//氣泡

	if(j == k){
		break;
	}

}
           

簡單選擇排序:将待排序列分為有序序列和無序序列,初始化時有序序列為空,從無序序列中選取一個最小值,并且與無序序列中的第一個元素交換,有序序列+1,無需序列-1

關鍵處代碼如下:

for(int i=0;i<n;i++){
	int k = i;//記錄最小值的下标
	j = i + 1;
	while(j > n){
		if(a[j] > a[j-1]){
			k = j-1;
		}
		j++;
	}
	a[i] <-> a[k];
}
           

其實這裡有一個問題忘了考慮了:若是i = k,就不用交換了,是以這裡少考慮了這一點。

題外話:其實一切事情難就難在堅持,貴在堅持。