没错,用一层循环搞定排序
package main
import "fmt"
func main() {
slice := []int{2, 1, 9, 10, 7, 3, 6}
sort(slice)
fmt.Println(slice)
}
func sort(slice []int) {
for j, i, h := len(slice)-1, 0, 0; j > 0;{
if slice[i] > slice[i+1] {
slice[i] ^= slice[i+1]
slice[i+1] ^= slice[i]
slice[i] ^= slice[i+1]
}
i++
if i == len(slice)-h-1 {
j--
h++
i = 0
}
}
}
C语言版
#include "stdio.h"
int num[100000];
int main()
{
int index= 0;
while (1)
{
scanf("%d", &num[index]);
if (num[index] ==-1) break;
index++;
}
for (int j = index - 1, i = 0, h = 0; j > 0 ; i++, i == index - h - 1 ? j--, h++, i = 0 : 1 )
num[i] > num[i + 1] ? num[i] ^= num[i + 1] ^= num[i] ^= num[i + 1] : 1;
for (int i = 0; i <index; i++)
printf("%d\t", num[i]);
return 0;
}
C语言,类似计数排序的思想
#include "stdio.h"
int num[100000];
int main()
{
while (1)
{
int s = 0;
scanf("%d", &s);
if (s != -1) num[s] = 1;
else break;
}
for (int i = 0; i < 100000; i++)
if(num[i]!=0) printf("%d\t", i);
return 0;
}
这种算法只是对冒泡排序进行了转换,也就是用变量传递的方式消除掉一层循环,其并不能提升冒泡排序O(N^2)复杂度的命运。