三种简单的排序通常是指:直接插入排序、冒泡排序、简单选择排序,这三种方式排序效率都非常的低因此称他们为简单排序(思路最简单)。
直接插入排序的思路:先把待排序列分为有序序列和无序序列,初始化时第一个元素为有序元素,排序时每次从无序序列中取第一个元素,查找其在有序序列中的位置,由于是有序序列只要找到第一个比它小的元素就找到了其位置。关键部分代码:
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,就不用交换了,因此这里少考虑了这一点。
题外话:其实一切事情难就难在坚持,贵在坚持。